总结⼀下最近的逆向⼯作(可能是⽐较全⾯的反编译⼯具汇
总)
⾸先呢,1024,⼤家程序员节快乐~
刚毕业,⼀开始想要⾛Java,到第⼀家公司,经理看我有点安卓基础,就先让我做安卓,那么既然做了,就把安卓搞好。⼯作⾥除了写APP,遇到了坑总是要填的,⾃⼰填不上,⽹上⼜不到合适的帖⼦解决怎么办?那么只有去学习别⼈的做法,这就不得不⽤到反编译,包括后⾯进了第⼆家⼿游公司,也需要做⼀些逆向⼯作。积累了⼀些东西,总觉得整理⼀下才⽐较安⼼。
感觉基本上把能⽤到的、频率⽐较⾼的都写下来了,对⾃⼰表述能⼒还算⾃信喜欢纯码字,⽐较懒没有图,见谅。
⾃⼰各类⼯具并且尝试去⽤也是发现了很多问题的,因为毕竟好多帖⼦都很旧了,这⾥我也都写出来,可以让看到的⼈少⾛些弯路。(当然要说⼀句,反编译拿来学习和研究安全是很好的⽅式,不要⽤在歪路上)
反编译的环境我也就不说了,%JAVA_HOME%.这个⼤家都熟悉,python可能运⾏⼀些脚本也会⽤到,不过我⽤的不多。
1、我最常⽤的反编译⼯具
(1)apktool
这应该是最常⽤的⼯具了,apk本质是个压缩包,直接改后缀解压就能看到完整的⽂件结构,但这样做,⽂件都是加密的,看不到明⽂。⽤apktool⼯具反编译拿到的资源⽂件,包括l、各布局⽂件等就可以直接看到了。如果⼀个app你觉得某个页⾯写的不错,⾃⼰⼜想不到怎么写,就可以反编译出来参考。
刚开始去这个⼯具,很多⽼的帖⼦并没有贴出官⽅⽹址,都是⾃⼰存的⽂件,很多版本⽐较⽼。这就导致⽤的时候我发现好多apk 完全不能反编译,我了很久是不是我的⽅法不对,出错信息也都读的晕头转向。最后我才知道,要⽤最新的jar包,才能保证能够使⽤。
这个⽹址我不太懂为什么很少有帖⼦直接贴出来,install标签写了如何安装、documentation也就是使⽤⽂档。上如果刚开始就到官⽹,会节省很多时间,⾥⾯各⽅⾯都写的⼗分详尽了,并且也有jar包的更新地址:
程序员嘛,英语总是要能看懂的,还是简单说⼀下安装和基本使⽤。(其实就是翻⼀下install标签的内容)
Windows平台为例:
把官⽹给的脚本(⽹址⾥脚本是个链接,点进去复制就好)放到记事本,后缀改bat
下载最新jar包,下载后改名为apktool.jar,后⾯⼀般都有版本号,为了⽅便,脚本⾥固定写成apktool。
把两个⽂件放到系统⽂件夹下C://Windows,这样你只要打开cmd就能⽤了
不过我的习惯来说还是只要保证两个⽂件在同⼀个⽂件夹下就可以了。⽤的时候在⽂件夹内shift+右键调cmd即可。
常⽤命令:
apktool.bat d test.apk ——会在当前⽬录⽣成与安装包同名的⽂件夹
amaze什么意思apktool.bat b -o test-new.apk test ——可以把上⾯⽣成的⽂件夹回打包成apk
⾄于反编译后修改了⽂件怎么反打包和签名,很多帖⼦写的很详细,也不难,没什么要补充的。
编程入门书籍图(2)dex2jarswitch怎么用翻译器
apktool拿到的除了布局资源⽂件,就是smali代码和assets资源,还有⼀些lib库,所以如果你没有了解smali或者不做⼿文件格式转换app
游,apktool也就只能帮你到这了。如果你想知道⼀些除了页⾯怎么写之外的逻辑代码,就要去怎么才能看Java代码。
这就要⽤到d2j,这是⼀个可以做很多事的⼯具包,根据包⾥⽂件名,你就能知道它能把⽂件在各种格式相互转换。我们反编译app ⽤的⽐较多的就是dex2jar,apk解压后会发现有⼀个class.dex⽂件(当然现在⼤部分包会有很多,也就是multiDex),这⾥⾯有app的src也就是源代码。
这个⼯具最开始来⽤,也是要强调,⼀定要⽤最新版。先贴出⼯具包的更新地址:
最初看到最多的帖⼦说的就是解压apk后,⽤命令dex2jar.bat class.dex拿到jar包。但我总觉得好⿇烦,每次都要改后缀、解压,不过这样已经能看到jar了,还是可以接受的。后来我⼜发现,很多apk的class⽂件就不只⼀个,这我就很头疼了,看了很多帖⼦,刚毕业的我这么菜,只能说我看不懂。
最后才知道,从这个⼯具包2.1版本之后,就已经⽀持多dex⽂件转换了,⽽且不需要解压,只需要最简单的⼀⾏命令就能拿到需要的jar包:
d2j-dex2jar.bat test.apk
所以还是要强调,什么都要去官⽅最新版!
⼆、拿到资源和源代码后
(1)jd-gui
如果你需要做逆向⼯作,smali不得不学,因为反编译后重新打包,还是需要⽤apktool,改代码也要改smali包⾥的代码。当然,不需要完全熟悉语法⾃⼰去那么累的编写(我第⼀次尝试⽤smali写⼀个hello world,⽤了⼏⼗⾏,可怕),⼀般来说,⽤ide写好java代码后,⾃⼰打包再反编译出来,做替换就⾏了。推荐⼀个android studio的插件,java2smali。nginx怎么解决
如果你只是想看看某个功能别⼈是怎么写的,那么只需要能读java代码就好了。⽽d2j拿到的jar包,直接解压的class⽂件是不可读的,所以需要⽤到这个jd-gui,还是先贴个官⽹地址:
记得什么都尽量官⽹,很重要。
使⽤⽅法⽐较简单,把d2j拿到的jar拖到界⾯⾥就好了,包结构也都很清楚。
⼩Tips:我在使⽤的时候发现,jd-gui在处理内部类的时候还是不够完善的,jar包拖进去有些地⽅是不完整的,所以我现在基本都是先把jar包解压出来,然后拖进去任意⼀个⽂件,这样他就会把每个⽂件都⾃动导进去,⾥⾯class$1这样的内部类也能都读到。
当然,现在⼤部分代码都是经过混淆的,⽽解混淆的⽅法,我看了很多⽂章,感觉这个应该现在还没有⼀个完善的⽅案,所以,对照⼀下资源⽂件,稍微理解⼀下逻辑就好了,编程还是要靠⾃⼰动脑。
(2)IDA Pro
很多⼚家现在都不会在java中写下全部代码,毕竟不够安全,都是⽤ndk写⼀些c与java交互的代码,然后打包成so库使⽤。so库就类似dll⽂件⼀样,在windows下其实是打不开的。⽽有些时候,要看清代码全貌,还是得想办法去看⼀下的。刚开始到的答案都是不能看,还有的说要在linux下打开,我总不能为了看这个再装个虚拟机吧。
最后到了这个⼯具,IDA Pro
不过这个嘛。不是免费的,可以去下破解或者绿⾊版。
使⽤⽅法也不难,打开后so库拖进去,会让你选解析格式,⼀般so库都是elf,选择后进了软件等待编译完成,⾥⾯会列出⽅法列表,点进去想看c代码的话,按F5就好了。这个⼯具我也还没⽤太熟练,没法说太多。
三、其他⼯具
还有⼀些其他⼯具,很多帖⼦也都是强烈推荐的。不知道是不是我不会⽤,总觉得不顺⼿,⽤了⼏次也就还是回归上⾯四种了,他们基本能应付⼤部分问题。
其实下⾯很多也就是上⾯⼯具包的⼀些集成,帮我们把需要⽤命令做的事可视化,往ui⾥⼀拖就⾏。懒⼈化的东西确实不错,但他们实在让我更懒得去⽤,最关键就是因为好多都不更新了,下载下来还要⾃⼰替换⼀些⽂件,更⿇烦,还不如⾃⼰动⼿。不过⼯具⾥⼀些功能还是不错的。⽽且既然说总结,还是全⾯⼀点好。
(1)jadx
这个还是很好⽤的,相当于d2j和jd-gui的结合,把apk直接拖进界⾯,就能看到源码,省略了我们⾃⼰拿jar包这个过程。
(2)android killer
sklearn库下载也是⼀种集成,把apktool、d2j和jd-gui都结合了起来,可以查壳、反编译、改代码,还能连接模拟器、编译、反打包调试。功能很齐全,还有⼀些⼩插件很好⽤,但就是很久没更新,⾃⼰要把⾥⾯的apktool和d2j的最新jar包都替换掉。但我的⽑病就是,集成度太⾼看不见过程我总感觉会出问题,喜欢⾃⼰动⼿,所以也就没怎么⽤。
编码转换和代码搜索功能很不错,经常会⽤到,安装和使⽤贴⼀个帖⼦:
反编译很多内容都是在吾爱破解到的,很多⼤神都在⾥⾯。
(3)jeb
同样很出名的反编译⼯具,除了⼀键反编译出可视化代码之外,特点就是能运⾏各种脚本去处理smali代码,批量反编译、批量解混淆,需要python环境。缺点就是对java环境⽐较挑,兼容⼀般。
我使⽤的时候试了很多,只有jdk8u121版本才⾏。其他版本会闪退,⾄于现在最新的稳定版本java11我也试了⼀下,没有闪退但还是不能⽤,报空指针错误。
由于我当时在反混淆的相关内容,到了这个,经测试也都效果⼀般,毕竟现在混淆⼿段⽐较完善了,加上软件同样很久不更,也就没怎么⽤。
需要的可以去52破解⼀下。
四、抓包
反编译时经常需要看⼀些请求的url,推荐⼀个很好⽤的抓包软件——charles,经常被叫做青花瓷。
⾄于他的使⽤,可以⽤⼀整篇的篇幅去写了,⽹上很多⼤神也都总结的很完整,这⾥只是提⼀句,推荐给没⽤过的⼈。
⽽且这个软件官⽅就是免费的,只是每半⼩时就要关闭⼀次。所以平时如果不专门做抓包,完全够⽤,很良⼼,当然注册⽅法也不难。配置好之后,⼿机设置代理、装证书就可以了。
五、⼿游相关
原来喜欢玩⼀些单机⼿游,⼜不像肝,经常去破解版。⾃⼰做了这⾏后,就突然想,能不能也试⼀下。
最早的⼿游破解还是很简单的,单机游戏都是把存档⽂件留在本地,还都是明⽂,只要有root,改⼀下data⾥的⽂件就能⽆法⽆天。遗憾是现在就算是⼿游,也很少会这样做了,甚⾄有些单机⼿游,不联⽹都不能玩,⽤云端存数据,接⼝我们⼜没法篡改,毫⽆办法,这也是为什么现在破解⼿游这么少的原因了。
不过虽然不能像原来⼀样直接改数据,却可以通过改⼿游⾥的逻辑,⽐如改⼀些参数让任务奖励放⼤、消耗物品不减反增这样的⽅式来实现。⾄于怎么操作,我只是总结⼀下⼯具,原理就不提了。
现在的⼿游,⼤多是h5、cocos2d、unity3d这三种。
我反编译过⼀个h5游戏微端,就⼀个webview加载了⼀个页⾯,这类我们可以说放弃就好了,除⾮你能⿊服务器。
看到的⽐较多的是cocos2d,apktool拿到的assets⽂件⾥⼀般就会放游戏的lua脚本,但都是加密的。
unity3d我不太懂,也没有实际需求就还没看。
由于也是刚接触⼿游逆向,好多东西我也没有成功实践,但看了很多⽂章之后,⼤概知道了⼏种常⽤的⼯具,记录⼀下
(1)xxtea
⼀般cocos2d的游戏都稳定会有⼀个名为libcocos2dlua.so的⽂件,通过ida去反编译这个库,能拿到很多有⽤的信息。很多lua脚本加密都是⽤xxtea,所以如果你能到sign和key,就可以⽤这个⼯具反编译出明⽂代码(介绍⼯具就不提其他语⾔上的知识了)。当然,现在很多脚本都并不是单⼀的加密,需要多种⼯具结合去⽤。
也是52破解⼤神写了xxtea_decrypt这个⼯具,输⼊了签名和key就可以解码了。
(2)unluac
如果你⽤notepad++打开反编译出的lua⽂件(很多是luac后缀),能看到开头有luaQ、luaR、luaS(代表不同的lua版本),那么你可以⽤unluac这个⼯具包来处理。
提⼀句,这些⽂件记事本打开是乱码,sublime打开直接是加密的⼗六进制格式,只有notepad++能看出来⼀些标志,不分⽂件这样打开,开头就是⽤xxtea加密的sign,这也是个取巧拿签名的⽅式。
(3)ljd
我想反编译的第⼀个⼿游,就遇到了跟⽹上⼤多数⽅法都不同的情况,就是luajit字节码加密⽅式。这也是被认为最难解码的⽅式,没有⼀个很完善的⼯具来⽤,很多都是介绍了ljd这个脚本,不过还是因为没更新了,基本没什么效果。
主要是我不搞lua,很多东西还都不懂,很多⼤神说有那个coco2dlua的so库就能做很多事了,可以通过⾥⾯⼀些函数dump出代码,看来还有很长的路要⾛。
最近做了很多相关⼯作,写之前觉得这可能是⼀个⽐较全⾯的反编译,写完才感觉其实没什么内容,差的很远。
感谢阅读,共同进步。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论