- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
Homepage:http://www.alawar.com/
看到ZeNiX大哥 对这个公司的游戏比较感兴趣 论坛上还发布了改公司的几个补丁 所以下载分析下
分析对象是 Farm Frenzy 2 :http://www.alawar.com/game/farm-frenzy-2/
Aspr的壳 脚本脱一下 程序有时间限制 启动时候有NAG 官方忽悠说 程序为Demo版 好像是keyfile来进行验证的 (网络验证的)
所以 目标首先干掉启动时的NAG
BP DialogBoxParamW 然后返回返回 过一会就可以看到一些字符串提示等等 最终重新加载 在这里下断点:
1001993E E8 DD8BFEFF call 10002520
10019943 83F8 FF cmp eax, -1
10019946 0F95C0 setne al
10019949 A2 61BD0610 mov byte ptr [1006BD61], al
1001994E 3AC3 cmp al, bl
10019950 74 07 je short 10019959
10019952 C605 60BD0610 0>mov byte ptr [1006BD60], 1 ; 这里是关键值 / 最后推出来的
……
100199E4 E8 9E83FFFF call 10011D87 ; 这里必须要跳
100199E9 84C0 test al, al
100199EB 75 62 jnz short 10019A4F
--------------------------
跟进 call 10011D87
10011D99 B0 01 mov al, 1 修改一下
10011D9B C3 retn
10011D9C C3 retn
--------------------------
这样程序就可以启动了 没有NAG了 但是进入程序后 直接弹出另一个NAG 方法相同 继续定位:
100195D5 803D 60BD0610 0>cmp byte ptr [1006BD60], 0
100195DC 0FB605 61BD0610 movzx eax, byte ptr [1006BD61]
100195E3 8B0D E0BC0610 mov ecx, dword ptr [1006BCE0] ; wrapper.1006BD68
100195E9 50 push eax
100195EA 74 06 je short 100195F2 ; 若不跳 则代表未注册
100195EC E8 BAE4FFFF call 10017AAB
100195F1 C3 retn
100195F2 E8 75E3FFFF call 1001796C
100195F7 C3 retn
大致就是上边的这个地方 通过 cmp byte ptr [1006BD60], 0 指令 得出该全局变量代表程序是否已注册
跟进call 1001796C
1001796C 56 push esi
1001796D 8BF1 mov esi, ecx
1001796F E8 85E5FFFF call 10015EF9 ; (kernel32.CreateThread)
10017974 8B0E mov ecx, dword ptr [esi]
10017976 E8 DC2A0000 call 1001A457 ; 进入看看
1001797B 84C0 test al, al
1001797D 74 24 je short 100179A3 ; 这里不能跳
1001797F 6A 00 push 0
10017981 8BCE mov ecx, esi
10017983 E8 3BADFFFF call 100126C3 ; 这个CALL很** 不要进去轻易修改
10017988 84C0 test al, al
1001798A 74 7D je short 10017A09 ; JMP
---------------------
进入call 1001A457 看看
1001A457 A0 A0C00610 mov al, byte ptr [1006C0A0]
1001A45C C3 retn
---------------------
莫非这个是网络验证返回值 ?
1001D50F E8 BC40FEFF call 100015D0
1001D514 A1 24A20410 mov eax, dword ptr [1004A224]
1001D519 8038 00 cmp byte ptr [eax], 0
1001D51C 0F95C0 setne al
1001D51F A2 A0C00610 mov byte ptr [1006C0A0], al
好像是有网络验证参与 但不太确定 猜的 ~ 猜[1006C0A0]这里代表是否连网或者已成功激活
所以最终的修改方案:
01、1001D519 8038 00 cmp byte ptr [eax], 0 // 1
02、10019950 74 07 je short 10019959 // JMP
03、10011D9B MOV AL,1
没深入去搞了 简单跟了下流程 有兴趣的朋友可以看一下 游戏挺好玩 ~ |
|