首页
社区
课程
招聘
[原创]写了一个小游戏,锻炼逆向能力。[解决办法]
发表于: 2012-5-9 00:23 5632

[原创]写了一个小游戏,锻炼逆向能力。[解决办法]

2012-5-9 00:23
5632
游戏下载:http://bbs.pediy.com/showthread.php?t=128298
破解办法.使用WriteProcessMemory写入假数据.真数据的过程看下面汇编代码.自己定位.使用SetDlgItemInt设置游戏血量.因此随便注入一个DLL挂钩这个函数就可以修改.下面的代码动态搜索.先来张图.
由于没看清楚修改方式.只能调试器中修改。大家可以试试对SetDlgItemInt函数下段.然后直接修改SetDlgItemInt函数的参数位置指向假数据.由于代码没办法修改保存.动态解码,只能写个补丁.
生成血量的代码.
00291F0F     90                NOP
00291F10     8B7A F8           MOV EDI,DWORD PTR DS:[EDX-8]
00291F13     23F9              AND EDI,ECX
00291F15     0BC7              OR EAX,EDI
00291F17     8B7A FC           MOV EDI,DWORD PTR DS:[EDX-4]
00291F1A     D1C1              ROL ECX,1
00291F1C     23F9              AND EDI,ECX
00291F1E     0BC7              OR EAX,EDI
00291F20     8B3A              MOV EDI,DWORD PTR DS:[EDX] ; 
00291F22     D1C1              ROL ECX,1
00291F24     23F9              AND EDI,ECX
00291F26     0BC7              OR EAX,EDI
00291F28     8B7A 04           MOV EDI,DWORD PTR DS:[EDX+4]
00291F2B     D1C1              ROL ECX,1
00291F2D     23F9              AND EDI,ECX
00291F2F     0BC7              OR EAX,EDI
00291F31     D1C1              ROL ECX,1
00291F33     83C2 10           ADD EDX,10
00291F36     4E                DEC ESI
00291F37   ^ 75 D7             JNZ SHORT 00291F10
00291F39     5F                POP EDI
00291F3A     5E                POP ESI
00291F3B     C3                RETN
修改为
00291F0F     90                NOP
00291F10     A1 70B22100       MOV EAX,DWORD PTR DS:[21B270] ..随便找个地址修改我们的值
00291F15     83E8 0A           SUB EAX,0A
00291F18     A3 70B22100       MOV DWORD PTR DS:[21B270],EAX
00291F1D     90                NOP
00291F1E     90                NOP
00291F1F     90                NOP
00291F20     90                NOP            ; 看汇编代码.这里要做一点修改.要调用3次这个函数.设置3个判断.随便再找几个全局地址存放就可以.
00291F21     90                NOP
00291F22     90                NOP
00291F23     90                NOP
00291F24     90                NOP
00291F25     90                NOP
00291F26     90                NOP
00291F27     90                NOP
00291F28     90                NOP
00291F29     90                NOP
00291F2A     90                NOP
00291F2B     90                NOP
00291F2C     90                NOP
00291F2D     90                NOP
00291F2E     90                NOP
00291F2F     90                NOP
00291F30     90                NOP
00291F31     90                NOP
00291F32     90                NOP
00291F33     90                NOP
00291F34     90                NOP
00291F35     90                NOP
00291F36     90                NOP
00291F37     90                NOP
00291F38     90                NOP
00291F39     5F                POP EDI
00291F3A     5E                POP ESI
00291F3B     C3                RETN

002825B5     8B87 B0500000     MOV EAX,DWORD PTR DS:[EDI+50B0]
002825BB     8B08              MOV ECX,DWORD PTR DS:[EAX]                ; 访问内存数据2
002825BD     8B97 AC500000     MOV EDX,DWORD PTR DS:[EDI+50AC]           ; 减去这个数据
002825C3     6A 0A             PUSH 0A
002825C5     51                PUSH ECX
002825C6     8BCF              MOV ECX,EDI
002825C8     FFD2              CALL EDX ..假数据修改.SUB指令
//
00275AD8     8B4424 04         MOV EAX,DWORD PTR SS:[ESP+4]        
00275ADC     8B11              MOV EDX,DWORD PTR DS:[ECX]
00275ADE     6A 00             PUSH 0
00275AE0     50                PUSH EAX            
00275AE1     8B81 9C500000     MOV EAX,DWORD PTR DS:[ECX+509C]
00275AE7     68 E9030000       PUSH 3E9
00275AEC     52                PUSH EDX         
00275AED     FFD0              CALL EAX      USER32.SetDlgItemInt设置游戏数据
00275AEF     C2 0400           RETN 4



特征代码
004825B5     8B87 B0500000     MOV EAX,DWORD PTR DS:[EDI+50B0]
004825BB     8B08              MOV ECX,DWORD PTR DS:[EAX]
004825BD     8B97 AC500000     MOV EDX,DWORD PTR DS:[EDI+50AC]
004825C3     6A 0A             PUSH 0A
004825C5     51                PUSH ECX
004825C6     8BCF              MOV ECX,EDI
004825C8     FFD2              CALL EDX
004825CA     894424 14         MOV DWORD PTR SS:[ESP+14],EAX
004825CE     85C0              TEST EAX,EAX
004825D0     C74424 1C 0000000>MOV DWORD PTR SS:[ESP+1C],0
004825D8     8D4424 14         LEA EAX,DWORD PTR SS:[ESP+14]
004825DC     7F 04             JG SHORT 004825E2
004825DE     8D4424 1C         LEA EAX,DWORD PTR SS:[ESP+1C]
004825E2     8B10              MOV EDX,DWORD PTR DS:[EAX]
004825E4     8BB7 B0500000     MOV ESI,DWORD PTR DS:[EDI+50B0]
004825EA     8B87 60500000     MOV EAX,DWORD PTR DS:[EDI+5060]
004825F0     895424 14         MOV DWORD PTR SS:[ESP+14],EDX
004825F4     8B97 5C500000     MOV EDX,DWORD PTR DS:[EDI+505C]
004825FA     85D2              TEST EDX,EDX
004825FC     7E 18             JLE SHORT 00482616
004825FE     8D8F 1C500000     LEA ECX,DWORD PTR DS:[EDI+501C]
00482604     8B19              MOV EBX,DWORD PTR DS:[ECX]
00482606     8B9C9F 1C400000   MOV EBX,DWORD PTR DS:[EDI+EBX*4+401C]
0048260D     8B0418            MOV EAX,DWORD PTR DS:[EAX+EBX]
00482610     83C1 04           ADD ECX,4
00482613     4A                DEC EDX
00482614   ^ 75 EE             JNZ SHORT 00482604
00482616     8B18              MOV EBX,DWORD PTR DS:[EAX]
00482618     6A 00             PUSH 0
0048261A     6A 04             PUSH 4
0048261C     8D4424 1C         LEA EAX,DWORD PTR SS:[ESP+1C]
00482620     50                PUSH EAX
00482621     56                PUSH ESI
00482622     FF97 18400000     CALL DWORD PTR DS:[EDI+4018]
00482628     50                PUSH EAX
00482629     FFD3              CALL EBX
0048262B     8B97 90500000     MOV EDX,DWORD PTR DS:[EDI+5090]
00482631     8DB7 70500000     LEA ESI,DWORD PTR DS:[EDI+5070]
00482637     6A 00             PUSH 0
00482639     8BCE              MOV ECX,ESI
0048263B     897424 18         MOV DWORD PTR SS:[ESP+18],ESI
0048263F     FFD2              CALL EDX            //这里是USER32.SetDlgItemInt

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 319
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
貌似游戏里的检测血量操作。
2012-5-12 11:52
0
雪    币: 316
活跃值: (128)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
不管怎么检测,最终还是要调用SetDlgItemInt和这段生成血量的代码,只要死死守住这里,就可以了.
2012-5-12 12:18
0
游客
登录 | 注册 方可回帖
返回
//