安卓某款使用Unity引擎的图片查看软件破解实例
安卓某款使用Unity引擎的图片查看软件逆向实例使用工具:
Fiddler(抓包)
安卓模拟器
Jd-gui(用来查看APK文件)
Apktool(用来反编译和回编译apk文件)
.NET Reflector (用于查看dll文件)
+ Reflexil插件v2.1(用于修改dll文件,Reflector本身没有修改功能)
Search And Replace(搜索字符串)
Notepad++(文本编辑器)
目标软件:
(原版APK)链接: https://pan.baidu.com/s/1jIQGypw 密码: srgj
教程:
1. 首先在模拟器内安装程序,用Fiddler抓包看看能不能抓到些有用的信息。
可以看到,当登录时,返回了一个xml形式的字符串,为(用户ID*用户邀请码*VIP到期日期)
首先会想到直接用Fiddler修改返回值,经测试是可行的,但是我们要做的是逆向apk文件
2. 使用jd-gui打开apk文件,查看AndroidManifest.xml找到启动器Activity,并找到onCreate(Bundle b)方法
发现居然是使用Unity制作的,那就不能使用Java方式修改了。
查阅资料得知,安卓Unity的文件放在APK\assets\bin\Data\Managed里,最主要的文件是Assembly-CSharp.dll,而且是可以使用.NET Reflector直接打开的。
也不知道为什么dll可以在安卓上运行。
2.5. APK\res\values\string.xml下空空如也,说明字符串是硬写在程序里的。
3.反编译apk,使用.NET Reflector打开APK\assets\bin\Data\Managed\Assembly-CSharp.dll文件,并导出以便于搜索字符串。(右键根目录-Export Source Code-选择导出文件夹)
4.尝试直接搜索字符串VIP,结果还真搜到了赋值语句
5.打开LoginController.cs分析可得出在<ILogin>c__Iterator4类下的MoveNext() : Boolean 方法是处理登陆的
6.得知了方法位置,在.NET Reflector里打开修改。
打开.NET Reflector,找到LoginController/ <ILogin>c__Iterator4/MoveNext(),此时能看到C#格式的复制语句,但是Reflector是没有直接编辑的功能的。
状态栏Tools里选择Reflexil v2.1打开插件界面,在插件界面里找到VipExpTime的赋值语句。
将123-126行删除(Shift选选中-右键Delete),在call DateTime::Parse(System String)前加一个产生一个值为” 3017/3/16 19:11:58”的字符串的语句,这样VIP处理的返回值就一直是3017年了。
(选中DateTime::Parse(System String)行-右键Create New-OpCode:ldstr;Operand type=string;Operand=3017/3/16 19:11:58-点击右边的Insert Before Select)
(图片上已经刷新过了)
7.右键左边树形图里的MoveNext()方法,选择Reflexil-Update Reflector object model,可以刷新Reflector分析出的代码。(此步非必需)
8.保存(右键树形图根-Reflexil-Save as-覆盖反编译的apk里的dll文件)
9.回编译,模拟器上运行,成功
新人学习中{:5_117:} 谢谢楼主分享,又有可以学习的了 谢谢楼主分享 学习下 在找安卓逆向的学习学习,谢谢分享 共同努力,共同进步 [吾爱汇编论坛52HB.COM]-支持一下,希望楼主做的更好,加油!感谢楼主分享,支持一下!!做的不错哦,楼主加油,期待更好的作品! 谢谢大佬分享,大佬万福 谢谢大佬分享
页:
[1]
2