这个周末我和好友聊天时,他向我求助修改一个他正在编写Python脚本。他试图通过解混淆一个APK,来理解该APK的混淆基址和防篡改保护机制。同我以往的APK逆向过程(dex2jar->jd-gui->done)相比,这是一个很有挑战性同时充满趣味的工作。同时,这个逆向过程我编写了一个我认为比较酷比较独特的工具。

怪异的字符串

同其他有过APK反编译工作经验的逆向工作者一样,我已经很习惯程序中的类和名字被ProGuard混淆(或者被DexGuard混淆字符串等),这对我来说不是什么困难。但是当我使用apktool打开这个应用的时候还是大吃一惊:

大部分的类和方法名都是很怪异的字符串,这几乎没法让我使用一个单独的工具或者编辑器来查看这些文件。所以目前最首要的步骤就是修复(坦诚的说应该是从头开始写)Matteo写的python脚本,这个脚本试图重新命名所有的混淆入口,脚本本身工作流程比较简单:遍历所有名称为不能打印字符的smali文件

使用ClassXXX替代混淆的类名字(XXX是一个自增的数字)

重命名文件

查找所有引用这些类的地方并使用新的名称替代(正则匹配)

在.field文件夹(类变量,方法等)中重复这个操作

这个过程结束之后,最终获得了一个可以浏览的文件夹和可读的smali文件:

但是这离完成还有很远的距离。

反篡改

在我继续进行之前,我先需要指出两点,以便你能够理解我这么做背后的理由:

1.这个应用使用了很奇怪的反篡改(很大可能是反调试之类的措施)保护,因此,使用注入代码的方式将smali代码重新打包成APK是不可行的,同样调试也是不行的

2.这样的保护措施不仅阻止了代码注入/修改,同时也会在检测到这种篡改后卸载软件

所以代码注入(XPosed也不行)、调试都无法使用,基本我通常的标准逆向方式都无法使用。

加密字符串

作为一个懒惰(或者说是聪明)的逆向者,我不想先去理解其中的逻辑,相反,我试图发现那些能够给我一些提示的、有意义的字符串,帮助我发现这个app在做些什么,但是我再次被震惊到了。

所有的字符串都进过了传统的加密算法加密,基本上所有引用字符串的地方都被如下的方式进行了替换:

Stringdecrypted=Class623::method5(newint[]{-12, 44,-35,...}, 52);

函数的参数仅仅是一个整形数组和其他的一些数字作为第二个参数(或许是某种形式的密钥?)

通常我遇到这种情况的做法是:1.反编译APK到Java(使用dex2jar+jd-gui或者仅仅是jadx)

2.获取到解密的java代码,并将其粘贴到一个独立的java控制台

3.对加密的东西执行解密例程从而获得明文结果

然而。。。任何工具都无法正确的将Class623::method5 的smali代码转换成

java代码,这些工具获得的输出都是无意义的东西,不起作用。但是目前我并不是很擅长阅读smali代码(这个解密程序本身也十分复杂,至少对我来说很复杂)…但是我不能就这么放弃。

所有的都让Smali模拟器来搞定吧

我当然可以利用Class623::method5的smali代码,创建一个新的安卓APP,然后使用apktool反编译,在这个方法的输出中注入代码,插入一个调用该函数代码的调用到app中,重新构建这个app并且运行它。但是:1.同样,我是一个懒惰的人

2.这个实现方式并不优雅

3.我头脑里闪现出一个很酷的想法,我必须尝试一下!

长话短说,我要做的是:“写一个smali解析器和模拟器,然后加载这个函数例程,最终它将输出所有我需要的明文!”。

于是我开始阅读Dalvik操作码说明,整合了一些代码,经过几个小时,我完成了这个简单的pyhon 脚本用于测试:fromsmali.emulatorimportEmulator

emu=Emulator()

# The smali file to emulate.

filename='decryptor.smali'

# Arguments for the method.

args={

'p0':(-62,-99,-106,-125,-123,-105,-98,-37,-105,-97,-103,-41,-118,-97,-113,-103,-109,-104,-115,111,98,103,35,52),

'p1':19

}

ret=emu.run(filename,args)

printemu.stats

print"RESULT:\n"

print"'%s'"%ret

而且,运行结果如下:

成功了!

我对所有的加密字符串执行该脚本,模拟器也能正确的解析和执行解密例程的smali代码,并解密所有我从反编译程序中抽取的每一个条目。从现在开始,所有的工作就是使用明文替换所有的加密条目,从而这个逆向过程易如反掌。

*原文链接:evilsocket,NoSecTec编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

python防反编译_用Python和Smali模拟器搞定一个加混淆、防篡改的APK逆向相关推荐

  1. python加密反编译_对Python源码进行加密及反编译前后对比

    关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...

  2. python so反编译_使用cython把python编译so

    1.需求 为了保证线上代码安全和效率,使用python编写代码,pyc可直接反编译,于是把重要代码编译so文件 2.工作 2.1 安装相关库: pip install cython yum insta ...

  3. python取反操作_在python中对于bool布尔值的取反操作

    背景 根据公司业务的需求,需要做一个对于mysql数据库的大批量更新.脚本嘛也是干干单单.使用了redis的队列做缓存,可以异步并发的多任务进行更新. 有点难受的地方在于,请求访问时,因为一些网速,速 ...

  4. python做身份证识别_不到100行代码搞定Python做OCR识别身份证,文字等各种字体

    不告诉你我用了它配合Python简简单单开发OCR识别,带你识别手写体.印刷体.身份证等N种,附代码! 一.你心目中的OCR 在你心目中,OCR是多大(-, 厉害,好厉害,非常厉害,-)呢? 是这么大 ...

  5. python怎么画地球_第12天|16天搞定Python数据分析,在地球上画个圈

    在数据可视化过程中,有时候,你需要将数据根据其采集的地理位置在地图上显示出来.比如说我们会想要在地图上画出城市,飞机的航线,乃至于城市景点等等.通常来说,一个地理信息系统都会带有这样的功能. 在Pyt ...

  6. python程序反编译

    目的:将使用pyinstaller生成的exe还原成.py文件 1.从生成的exe中提取出.pyc文件 这里的方法有很多...可以使用pyinstxtractor..也可以使用官方的archive_v ...

  7. 给大家推荐一个.Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  8. Android笔记:防反编译、代码混淆中,解决第三方jar包不被混淆的一些心得,及gson防混淆方法...

    为了防止代码被反编译,一般在签名导出前需要对代码进行混淆.最近发现自己的一个项目工程在代码混淆后,使用中出现了异常.以下是自己这几天在解决代码混淆以及引入第三方jar包导致混淆出现的问题处理的一些心得 ...

  9. 【Unity】防反编译之windows平台加密dll

    功能取决于需求,在实现这功能之前,却有一个小小的插曲,有同学认为,并不需要去实现游戏加密,再怎样也会被破解,何必浪费精力.虽然这样说,但是我们所做的加密至少也会增加一点破解成本,不会让我们辛苦写的代码 ...

最新文章

  1. 从源码学习Transformer!
  2. Spring 4 CustomEditorConfigurer Example--转
  3. java并发编程基础系列(五): 创建线程的四种方式
  4. linux vi修改后如何保存
  5. python 项目自动生成requirements.txt文件
  6. 【tensorflow】tf.reshape函数说明:重塑张量
  7. 三全食品:信息化建设狂飙突进的六年
  8. UI标签库专题六:JEECG智能开发平台 Autocomplete(自动补全标签 )
  9. rstudio和matlab,R语言与matlab循环时间对比
  10. 应用 | 同学,该学MyCat实际应用案例与MyCat读写分离了
  11. 在线报表设计实战系列 – 制作动态列与静态列混排的报表(5)
  12. create-react-app 支持多入口
  13. 音乐外链转换工具 php,音乐外链生成工具V2.1 支持14个音乐网站外链提取转换
  14. Depends工具(检查exe文件依赖的好朋友)
  15. jsonp 跨域 java_浅析 JSONP 跨域原理
  16. nginx image_filter模块415问题
  17. mysql 创建用户、授权、修改密码
  18. MD5校验文件完整性
  19. 7-1 统计大写辅音字母 (15 分)
  20. I2C总线的SDA和SCL

热门文章

  1. Android大疆无人机对接声网sdk
  2. 双11硝烟散去,零售业开始“外卷”
  3. Linux命令--expect spawn的用法(实现人机交互自动化操作)
  4. pikachu Unsafe Filedownload 不安全的文件下载 (皮卡丘漏洞平台通关系列)
  5. PTA题库函数递归 菲波那切数列(递归版)
  6. 18 岁那年,我被骗的好苦
  7. qstring 字符串查找_Qt QString常用方法
  8. CANoe常用操作(CANoe系列其一)
  9. 大学生毕业设计:在线音乐网站设计——流行音乐公司网站(8页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  10. 努力打卡 每天学习 不浪费每一天 Day42