首页
社区
课程
招聘
[旧帖] [求助]问一个通过OD反汇编进行代码偷换方面的问题 0.00雪花
发表于: 2010-12-1 09:30 3299

[旧帖] [求助]问一个通过OD反汇编进行代码偷换方面的问题 0.00雪花

2010-12-1 09:30
3299
事情的经过是这样的, 我想修改一个程序的窗口的标题
但是标题并不是标准的资源, 不能通过ResHacker.exe之类的工具修改
所以, 用Ollydbg修改应该是目前我知道的比较好的选择了, 就像修改标准的OllyDbg的标题为中文或其它个性化的名称一样

我碰到的问题跟OD直接修改不同的两点在于:
1. OD里面, 直接把Call CreateWindowExA 前面的倒数第三个push EDX的EDX对应的地址改成想要的标题字符串地址就可以了
而且前面有个长度6字节的LEA EDX .... 可以直接替换... 比较容易实现...但是我碰到的这个, 倒数第三个push EAX, 前面赋值语句
是MOV EAX , DWORD PRT DS:[BPI], 只有两个字节... 必须跳转到程序空白的地方修改....

下面就是生成窗口的代码, Call CreateWindowExA在一个子程序里面, 代码非常紧凑..
   1. 008042B2    5D              POP EBP                                  ; 帅小呆2.008042EC
   2. 008042B3    C3              RETN
   3. 008042B4    53              PUSH EBX                                 ; Begin here now
   4. 008042B5    56              PUSH ESI
   5. 008042B6    8BDA            MOV EBX,EDX
   6. 008042B8    8BF0            MOV ESI,EAX
   7. 008042BA    8B43 20         MOV EAX,DWORD PTR DS:[EBX+20]
   8. 008042BD    50              PUSH EAX
   9. 008042BE    8B43 34         MOV EAX,DWORD PTR DS:[EBX+34]            ; 帅小呆2.00400000
  10. 008042C1    50              PUSH EAX
  11. 008042C2    6A 00           PUSH 0
  12. 008042C4    8B43 1C         MOV EAX,DWORD PTR DS:[EBX+1C]
  13. 008042C7    50              PUSH EAX
  14. 008042C8    8B43 18         MOV EAX,DWORD PTR DS:[EBX+18]
  15. 008042CB    50              PUSH EAX
  16. 008042CC    8B43 14         MOV EAX,DWORD PTR DS:[EBX+14]
  17. 008042CF    50              PUSH EAX
  18. 008042D0    8B43 10         MOV EAX,DWORD PTR DS:[EBX+10]
  19. 008042D3    50              PUSH EAX
  20. 008042D4    8B43 0C         MOV EAX,DWORD PTR DS:[EBX+C]
  21. 008042D7    50              PUSH EAX
  22. 008042D8    8B43 04         MOV EAX,DWORD PTR DS:[EBX+4]
  23. 008042DB    50              PUSH EAX
  24. 008042DC    8B03            MOV EAX,DWORD PTR DS:[EBX]  ; 此处是修改EAX的赋值命令,只有两个字节
  25. 008042DE    50              PUSH EAX   ; 此处是WindowName存放地址....
  26. 008042DF    8D43 4C         LEA EAX,DWORD PTR DS:[EBX+4C]
  27. 008042E2    50              PUSH EAX
  28. 008042E3    8B43 08         MOV EAX,DWORD PTR DS:[EBX+8]
  29. 008042E6    50              PUSH EAX                                 ; end next line
  30. 008042E7    E8 F8960400     CALL 0084D9E4                            ; <JMP.&USER32.CreateWindowExA>
  31. 008042EC    8986 80010000   MOV DWORD PTR DS:[ESI+180],EAX
  32. 008042F2    5E              POP ESI                                  ; 帅小呆2.008042EC
  33. 008042F3    5B              POP EBX                                  ; 帅小呆2.008042EC
  34. 008042F4    C3              RETN
  35. 008042F5    90              NOP
  36. 008042F6    90              NOP


2. OD里面, CreateWindowExA是简单的代码, 我碰到的情况, CreateWindowExA在一个被调用的子程序里面...
我进行了直接的跳转, 但是发现, 总是出错, 可能跟跳转的时候需要进出这个被调用的子程序还有关系, 不知道该如何处理...

直接用JMP跳出去, 执行完再跳回来, 貌似是会出问题的

我尝试把整个子程序都转移到别的地方, 希望然后再跳回来, 发现子程序还是要RETN到调用它的地方, ...

是不是我应该从调用这个子程序的地方修改? 还是有其他更好的方法?

这个链接: http://att.newsmth.net/att.php?p.55.46534.3499.rar

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 198
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哪位大大知道方法?

我在unpack上看到有人给了答案的结果, 但是没说方法

所用的方法不是通过修改这里的代码实现的...

2010-12-1 14:27
0
游客
登录 | 注册 方可回帖
返回
//