python防反编译_用Python和Smali模拟器搞定一个加混淆、防篡改的APK逆向
这个周末我和好友聊天时,他向我求助修改一个他正在编写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逆向相关推荐
- python加密反编译_对Python源码进行加密及反编译前后对比
关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...
- python so反编译_使用cython把python编译so
1.需求 为了保证线上代码安全和效率,使用python编写代码,pyc可直接反编译,于是把重要代码编译so文件 2.工作 2.1 安装相关库: pip install cython yum insta ...
- python取反操作_在python中对于bool布尔值的取反操作
背景 根据公司业务的需求,需要做一个对于mysql数据库的大批量更新.脚本嘛也是干干单单.使用了redis的队列做缓存,可以异步并发的多任务进行更新. 有点难受的地方在于,请求访问时,因为一些网速,速 ...
- python做身份证识别_不到100行代码搞定Python做OCR识别身份证,文字等各种字体
不告诉你我用了它配合Python简简单单开发OCR识别,带你识别手写体.印刷体.身份证等N种,附代码! 一.你心目中的OCR 在你心目中,OCR是多大(-, 厉害,好厉害,非常厉害,-)呢? 是这么大 ...
- python怎么画地球_第12天|16天搞定Python数据分析,在地球上画个圈
在数据可视化过程中,有时候,你需要将数据根据其采集的地理位置在地图上显示出来.比如说我们会想要在地图上画出城市,飞机的航线,乃至于城市景点等等.通常来说,一个地理信息系统都会带有这样的功能. 在Pyt ...
- python程序反编译
目的:将使用pyinstaller生成的exe还原成.py文件 1.从生成的exe中提取出.pyc文件 这里的方法有很多...可以使用pyinstxtractor..也可以使用官方的archive_v ...
- 给大家推荐一个.Net的混淆防反编译工具ConfuserEx
给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...
- Android笔记:防反编译、代码混淆中,解决第三方jar包不被混淆的一些心得,及gson防混淆方法...
为了防止代码被反编译,一般在签名导出前需要对代码进行混淆.最近发现自己的一个项目工程在代码混淆后,使用中出现了异常.以下是自己这几天在解决代码混淆以及引入第三方jar包导致混淆出现的问题处理的一些心得 ...
- 【Unity】防反编译之windows平台加密dll
功能取决于需求,在实现这功能之前,却有一个小小的插曲,有同学认为,并不需要去实现游戏加密,再怎样也会被破解,何必浪费精力.虽然这样说,但是我们所做的加密至少也会增加一点破解成本,不会让我们辛苦写的代码 ...
最新文章
- 从源码学习Transformer!
- Spring 4 CustomEditorConfigurer Example--转
- java并发编程基础系列(五): 创建线程的四种方式
- linux vi修改后如何保存
- python 项目自动生成requirements.txt文件
- 【tensorflow】tf.reshape函数说明:重塑张量
- 三全食品:信息化建设狂飙突进的六年
- UI标签库专题六:JEECG智能开发平台 Autocomplete(自动补全标签 )
- rstudio和matlab,R语言与matlab循环时间对比
- 应用 | 同学,该学MyCat实际应用案例与MyCat读写分离了
- 在线报表设计实战系列 – 制作动态列与静态列混排的报表(5)
- create-react-app 支持多入口
- 音乐外链转换工具 php,音乐外链生成工具V2.1 支持14个音乐网站外链提取转换
- Depends工具(检查exe文件依赖的好朋友)
- jsonp 跨域 java_浅析 JSONP 跨域原理
- nginx image_filter模块415问题
- mysql 创建用户、授权、修改密码
- MD5校验文件完整性
- 7-1 统计大写辅音字母 (15 分)
- I2C总线的SDA和SCL
热门文章
- Android大疆无人机对接声网sdk
- 双11硝烟散去,零售业开始“外卷”
- Linux命令--expect spawn的用法(实现人机交互自动化操作)
- pikachu Unsafe Filedownload 不安全的文件下载 (皮卡丘漏洞平台通关系列)
- PTA题库函数递归 菲波那切数列(递归版)
- 18 岁那年,我被骗的好苦
- qstring 字符串查找_Qt QString常用方法
- CANoe常用操作(CANoe系列其一)
- 大学生毕业设计:在线音乐网站设计——流行音乐公司网站(8页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
- 努力打卡 每天学习 不浪费每一天 Day42