好友
阅读权限30
听众
最后登录1970-1-1
|
无闻无问
发表于 2021-1-22 15:45
本帖最后由 无闻无问 于 2021-1-22 15:45 编辑
一个很牛的软件,有免费版和专业版,可分析、修改apk文件。经过多年更新和维护,已经很不错了…… 更多情况,请登录官网了解!
一、加壳了,区段情况。
二、未注册情况。
1. 帮助菜单中有注册输入。
2. 打开一个apk或其它功能,会提示未注册。
3. 每隔一定时间会提示未注册,并退出软件。
三、去除注册提示。
文件—打开文件,选择一个apk,会出现注册提示框,功能不可用。
如何定位,方法有很多:如可搜索英文提示字符串后,下内存访问断点定位。
我这里就用比较快的暂停法。当然,还有其它方法,不过,下对话框等断点会无效……
文件—打开文件,选择一个apk,待出现注册提示框,暂停程序,堆栈中找可疑情况……
跟过去,可看到mfc的模态对话框调用……
堆栈中再回溯往上找一层,看到未注册提示内容……
一个关键值判断:0044AAB0 |. 39B3 78090000 cmpdword ptr ds:[ebx+0x978],esi ; GDAE3_87.005F660C
说明[ebx+0x978]中的值,很可能就是注册与未注册的保存地方……
选中它,右键—查找参考---地址常量……
比较和取值的都不管,只关心赋值,赋值两句下断即可……
重载程序(为什么要重载?因为有重启验证,搞定重启验证,一切都解决了)……
因为有壳,重载程序,断点会被禁用,所以得找一个时机启用断点……
方法有很多,我这里主要用了在资源段下内存访问断点的方法,待内存断点断下后,启用断点,再将资源段内存断点删除……
断下了,在这里:
Eax为0,给了目标地址,eax是这句计算的:
00442235 25 FF000000 and eax,0xFF
上方还有个call,关键call,进去后发现很多地方调用,且会有不同的返回值,所以里面不好动,就改这一句了,将and 指令修改为or 即可……
修改后进入程序,文件—打开文件,选择一个apk,没有提示了……
再看看注册菜单,成灰色了,说明重启验证去除了……
四、解决定时验证。
每隔一段时间,会触发验证,再次提示未注册并自动退出……
有趣的是,你不打开文件分析,它基本不提示……
猜想,这种验证多半与创建线程CreateThread和时钟函数SetTimer有关……
下CreateThread函数断点。[esp+c]<0x70000000加上条件断点,只关注程序创建线程,系统的不管……
断下后,选中线程回调函数在反汇编窗口中跟过去,段首下断……
经过跟踪,目前我发现有3个地方创建了线程(我测试了一小段时间,不排除还有)……
3个线程回调函数跟过去,功能差不多,具体什么功能没有详细分析,但看代码较短,应该就是一种反调试手段,究竟是不是,等待大家分析呵……
这里,直截了当,回调函数头部retn……
大概3处:
---->1
00445A10 55 push ebp ; retn 8,retn… =======C2 0800
00445A11 8BEC mov ebp,esp
00445A13 |. 81EC DC010000 sub esp,0x1DC ; retn 0x8
00445A19 |. 53 push ebx ; GDAE3_87.0044F28C
00445A1A |. 56 push esi ; msvcrt.7779317C
00445A1B |. 57 push edi
00445A1C |. 50 push eax
00445A1D |. 55 push ebp
00445A1E |. E8 02000000 call GDAE3_87.00445A25
00445A23 \. C3 retn
55 8B EC 81 EC DC 01 00 00 53 56 57 50 55 E8 ???????? C3
---->2
0044BEE0 55 push ebp ; retn 0x10 =======C2 1000
0044BEE1 8BEC mov ebp,esp
0044BEE3 |. 81EC 74010000 sub esp,0x174 ; retn 0x10
0044BEE9 |. 53 push ebx ; GDAE3_87.0044F28C
0044BEEA |. 56 push esi ; msvcrt.7779317C
0044BEEB |. 57 push edi
0044BEEC |. 53 push ebx ; GDAE3_87.0044F28C
0044BEED |. 51 push ecx
0044BEEE |. 50 push eax
0044BEEF |. 55 push ebp
0044BEF0 |. E8 04000000 call GDAE3_87.0044BEF9
0044BEF5 \. C3 retn
55 8B EC 81 EC 74 01 00 00 53 56 57 53 51 50 55 E8 ???????? C3
---->3
0044C520 55 push ebp ; retn 10 =======C2 1000
0044C521 8BEC mov ebp,esp ; retn 10
0044C523 |. 81EC 30010000 sub esp,0x130 ; retn 10
0044C529 |. 53 push ebx ; GDAE3_87.0044F28C
0044C52A |. 56 push esi ; msvcrt.7779317C
0044C52B |. 57 push edi
0044C52C |. 53 push ebx ; GDAE3_87.0044F28C
0044C52D |. 51 push ecx
0044C52E |. 50 push eax
0044C52F |. 55 push ebp
0044C530 |. E8 04000000 call GDAE3_87.0044C539
0044C535 \. C3 retn
55 8B EC 81 EC 30 01 00 00 53 56 57 53 51 50 55 E8 ???????? C3
Ok,全部修改后,测试了一会儿,发现基本没问题了……
最后打补丁,用“PYG内存破解补丁制作工具”制作补丁,因为有壳,所以要hook 一个时机,hook哪个dll和函数,大家自己测试,我的配置如下:
由于测试时间不是很长,部分修改处也没有详细分析代码功能,故可能还有问题,敬请大家测试……
欢迎回帖交流,说得不当的,欢迎大家指正,谢谢!
最后说明,不提供补丁!不提供补丁!不提供补丁!敬请理解! |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|