OD调试器DIY

在一些OD上,往往会看到OD的标题不是我们常见的OD标题,而是一些比较个性化的OD标题,如,小花www.zfsyhg.com个性加强版OD

这些修改后的OD标题怎么来的,如果动手能力强的朋友一定会用来解剖这些个性化标题的OD,以便一探究竟--

其实想拥有一款属于自己的个性化标题的OD很容易,只需要经过下面的操作,菜鸟可以拥有一款属于自己的个性化标题的OD --



两个地址:0041E35F       00435E46

一个基值:004B59E6(在00435E46这下F2断点,F9断在00435E46后,看寄存器窗口中的ESI的值,你们那是多少就是多少,不过

          一般都是这个004B59E6)   修改后的OD名称基值要大于它:可以在004B59E6以后,最好是在地址:004B71EE之后,

         但是要注意,位移地址不能出004CA000区段(如果出了004CA000区段,保存可执行文件时会提示无法重定位)找个空白

         的地方,写入自定义OD名称---  004B71EE = 004B59E6 + 0x1808 也就是:[esi+0x1808]= 004B71EE (这是存OD标题的地方)

用到的断点:bp LoadIconA   (初次修改的情况下用到,熟练了就用不着了)

用到的命令:DD XXXXXXXX(X借指地址)

分三步:本教程以地址:0x4B7182为例

第一步:在数据窗口中 下 DD 004B71EE  命令,在来到地址 004B71EE 处, 向下拉,找个空白的地方写入自定义OD标题

        然后记下写入自定义代码的开始地址:XXXXXXX(0x4B7182) 后复制到可执行文件--命名为:任意名字,区分开来--

第二步:载入修改后的OD,来到 0041E35F 修改代码:mov edx,0x4B3966 为 mov edx,0x4B7182,然后再复制到可执行文件--
        
        会提示要重定位,我们不用管它,OD自动帮我们重新定位,点“是”- 继续--

第三步:继续载入修改后的OD,来到 00435E46 修改代码 lea edx,dword ptr ds:[esi+0x1808] 为:lea edx,dword ptr ds:[esi+0xXXXX]
        
        (XXXX = 写入自定义OD标题处的地址 减去 基值004B59E6,例:我写入自定义标题的起始地址是:004B7182,

        那么XXXX就等于004B7182减去004B59E6,借助专业计算器算出结果为 179C )那么,这个地址就改为lea edx,dword ptr ds:[esi+0x179C]

最直接的方法就是在 00435E46 处直接修改成如下代码:MOV EDX XXXXXXXXX (代指个性化标题地址),但我认为这样改有个不好的地方,就是可能会在调试的时候性能不稳定..


再次保存后,一款属于自己的个性化标题的OD就完成了----

如果你这就想用它了,那我可以告诉你,前面的修改才是修改OD的第一步,接下来要做的是,将Plugin、UDD两个路径设置成相对(自动获取)路径

代码如下:

1 自动配置UDD、PLUGIN为绝对路径

修改前
00437376   .  68 027F0000   PUSH    7F02                             ; /RsrcName = IDC_WAIT
0043737B   .  6A 00         PUSH    0                                ; |hInst = NULL
0043737D   .  E8 76810700   CALL    <JMP.&USER32.LoadCursorA>        ; \LoadCursorA

修改后
00437376   . /E9 55830700   JMP     Ollydbg.004AF6D0                 ; 修改这里 跳到一个空白的地方,以便写入后面的代码
0043737B   > |6A 00         PUSH    0                                ; |hInst = NULL
0043737D   . |E8 76810700   CALL    <JMP.&USER32.LoadCursorA>        ; \LoadCursorA

修改方法:

把二进制码 00 70 6C 75 67 69 6E 00 55 44 44 00 粘贴到 4AF6C4 

然后修改 00437376 的 PUSH 7F02 为 JMP 004AF6D0 (在这是个例子)
跟随跳转来到空白处,选中下面的二进制代码,再选中空白起始地址 004AF6D0 的这一行,向下拉,因为二进制代码就
下面这些,所以选多点也无所谓,选好后,再二进制粘贴后保存就可以修改成UDD、PLUGIN路径为自动获取路径了--



完整代码:

  PUSHAD
  MOV     EDI,004D3868
  XOR     EAX,EAX
  XOR     ECX,ECX
  DEC     ECX
  REPNE   SCAS BYTE PTR ES:[EDI]
  NEG     ECX
  DEC     ECX
  PUSH    ECX
  MOV     EDI,0050AE00
  PUSH    004D3868
  PUSH    EDI
  CALL    004AF22E
  POP     ECX
  MOV     BYTE PTR DS:[ECX+EDI-1],5C
  MOV     BYTE PTR DS:[ECX+EDI],0
  ADD     EDI,100
  PUSH    ECX
  PUSH    0050AE00
  PUSH    EDI
  CALL    004AF22E
  POP     ECX
  PUSH    ECX
  PUSH    004AF6C5
  SUB     EDI,100
  ADD     EDI,ECX
  PUSH    EDI
  CALL 004AF22E
  NOP
  PUSH    004AF6CC
  ADD     EDI,100
  PUSH    EDI
  CALL 004AF22E
  PUSH    004D53A4
  PUSH    0050AF00
  PUSH    004B74FD
  PUSH    004B747E
  CALL 004AF21C
  PUSH    004D53A4
  PUSH    0050AE00
  PUSH    004B7506
  PUSH    004B747E
  CALL 004AF21C
  POP     ECX
  PUSH    ECX
  MOV     EDI,0050AE00
  ADD     ECX,7
  XOR     EAX,EAX
  REP     STOS BYTE PTR ES:[EDI]
  POP     ECX
  ADD     ECX,4
  MOV     EDI,50AF00
  XOR     EAX,EAX
  REP     STOS BYTE PTR ES:[EDI]
  POPAD
  PUSH    7F02
  PUSH    43737B
  RETN


二进制代码:

60 BF 68 38 4D 00 33 C0 33 C9 49 F2 AE F7 D9 49 51 BF 00 AE 50 00 68 68 38 4D 00 57 E8 3D FB FF
FF 59 C6 44 39 FF 5C C6 04 39 00 81 C7 00 01 00 00 51 68 00 AE 50 00 57 E8 21 FB FF FF 59 51 68
C5 F6 4A 00 81 EF 00 01 00 00 03 F9 57 E8 0C FB FF FF 90 68 CC F6 4A 00 81 C7 00 01 00 00 57 E8
FA FA FF FF 68 A4 53 4D 00 68 00 AF 50 00 68 FD 74 4B 00 68 7E 74 4B 00 E8 CF FA FF FF 68 A4 53
4D 00 68 00 AE 50 00 68 06 75 4B 00 68 7E 74 4B 00 E8 B6 FA FF FF 68 A4 53 4D 00 68 00 AE 50 00
68 06 75 4B 00 68 7E 74 4B 00 E8 9D FA FF FF 59 51 BF 00 AE 50 00 83 C1 07 33 C0 F3 AA 59 83 C1
04 BF 00 AF 50 00 33 C0 F3 AA 61 68 02 7F 00 00 68 7B 73 43 00 C3



2 解决 OD 格式化 Long Double 错误(如果用了这个就不要用下面的那个)

修改前

0047E7D7  |> \66:8B45 14    MOV AX,WORD PTR SS:[EBP+14]
0047E7DB  |.  50            PUSH EAX                                 ; /Arg5
0047E7DC  |.  FF75 10       PUSH DWORD PTR SS:[EBP+10]               ; |Arg4
0047E7DF  |.  FF75 0C       PUSH DWORD PTR SS:[EBP+C]                ; |Arg3
0047E7E2  |.  68 94784C00   PUSH Themida_.004C7894                   ; |Arg2 = 004C7894 ASCII "%#.19Le"
0047E7E7  |.  52            PUSH EDX                                 ; |Arg1
0047E7E8  |.  E8 3F840200   CALL Themida_.004A6C2C                   ; \Themida_.004A6C2C

修改后

0047E7D7     /E9 B50F0300   JMP Themida_.004AF791                    ; 修改这里,跳到一个空白的地方,以便写入后面的代码
0047E7DC  |. |FF75 10       PUSH DWORD PTR SS:[EBP+10]               ; |Arg4
0047E7DF  |. |FF75 0C       PUSH DWORD PTR SS:[EBP+C]                ; |Arg3
0047E7E2  |. |68 94784C00   PUSH Themida_.004C7894                   ; |Arg2 = 004C7894 ASCII "%#.19Le"
0047E7E7  |. |52            PUSH EDX                                 ; |Arg1
0047E7E8  |. |E8 3F840200   CALL Themida_.004A6C2C                   ; \Themida_.004A6C2C

修改方法:

修改 0047E7D7 的 MOV AX,WORD PTR SS:[EBP+14] 为 JMP 004AF791(这个地址是个变量---)

然后到 004AF791 增加如下代码

增加代码

004AF791      837D 0C FF    CMP DWORD PTR SS:[EBP+C],-1
004AF795      75 0A         JNZ 004AF7A1
004AF797      837D 10 FF    CMP DWORD PTR SS:[EBP+10],-1
004AF79B      75 04         JNZ 004AF7A1
004AF79D      8065 0C FE    AND BYTE PTR SS:[EBP+C],0FE
004AF7A1      66:8B45 14    MOV AX,WORD PTR SS:[EBP+14]
004AF7A5      50            PUSH EAX
004AF7A6    ^ E9 31F0FCFF   JMP 0047E7DC       ******  留意这行的回跳,如果跳往别处,请手动改回到这行代码

二进制代码:83 7D 0C FF 75 0A 83 7D 10 FF 75 04 80 65 0C FE 66 8B 45 14 50 E9 31 F0 FC FF  (二进制代码粘贴后留意最后一行,如果发现最后一行跳转位置错误,要改回来)

解决OutputDebugString("%s")错误

Ctrl+G来到:00461363,直接在原代码上修改成以下的字段--覆盖保存就可以了----

00431363      8D85 98FDFFFF  LEA EAX,DWORD PTR SS:[EBP-0x268]
00431369      8038 25        CMP BYTE PTR DS:[EAX],0x25
0043136C      75 03          JNZ SHORT NTOlly.00431371
0043136E      C600 26        MOV BYTE PTR DS:[EAX],0x26
00431371      40             INC EAX
00431372      4A             DEC EDX
00431373    ^ 75 F4          JNZ SHORT NTOlly.00431369

8D 85 98 FD FF FF 80 38 25 75 03 C6 00 26 40 4A 75 F4

插件预先加载

00438D2F -> jmp 004AF7DD(ollydbg内一段全0区域或新加的节,位置自己找)

004AF7DD代码
pushad    
call 00496658
popad
cmp dword ptr [4D578C], 0
jmp 00438D36

61 E8 75 6E FE FF 61 83 3D 8C 57 4D 00 00 E9 46 95 F8 FF 


00438EE1处CALL指令 -> NOP 


解决 od 格式化 long double 错误(如果用了这个就不要用上面的那个)

004AA2E0   8B4424 04        MOV EAX,DWORD PTR SS:[ESP+4]
004AA2E4   8B5424 08        MOV EDX,DWORD PTR SS:[ESP+8]
004AA2E8   E9 63530000      JMP OLLYDBG.004AF650(004AF650是个空白处,这个自己找)    //修改此行
004AA2ED   90               NOP
004AA2EE   74 06            JE SHORT OLLYDBG.004AA2F6
004AA2F0   DB2A             FLD TBYTE PTR DS:[EDX]
004AA2F2   DF38             FISTP QWORD PTR DS:[EAX]
004AA2F4   9B               WAIT
004AA2F5   C3               RETN
004AA2F6   8B0A             MOV ECX,DWORD PTR DS:[EDX]
004AA2F8   8908             MOV DWORD PTR DS:[EAX],ECX
004AA2FA   8B4A 04          MOV ECX,DWORD PTR DS:[EDX+4]
004AA2FD   8948 04          MOV DWORD PTR DS:[EAX+4],ECX
004AA300   C3               RETN

在空白处修补代码:
004AF650   66:817A 08 3E40  CMP WORD PTR DS:[EDX+8],403E
004AF656  ^0F84 9AACFFFF    JE OLLYDBG.004AA2F6
004AF65C   833A FF          CMP DWORD PTR DS:[EDX],-1
004AF65F  ^0F85 8BACFFFF    JNZ OLLYDBG.004AA2F0
004AF665   837A 04 FF       CMP DWORD PTR DS:[EDX+4],-1
004AF669  ^0F85 81ACFFFF    JNZ OLLYDBG.004AA2F0
004AF66F   66:817A 08 3D40  CMP WORD PTR DS:[EDX+8],403D
004AF675  ^0F85 75ACFFFF    JNZ OLLYDBG.004AA2F0
004AF67B   FF02             INC DWORD PTR DS:[EDX]
004AF67D   FF42 04          INC DWORD PTR DS:[EDX+4]
004AF680   C642 07 80       MOV BYTE PTR DS:[EDX+7],80
004AF684   66:FF42 08       INC WORD PTR DS:[EDX+8]
004AF688  ^E9 69ACFFFF      JMP OLLYDBG.004AA2F6 ******* 一定要记得跳回去

注意:设置路径为相对时,要注意保存备份文件,以便失败后再调试--我在修改时,有些时候也会发生错误,所以修改时,请一定要做好修改后的OD备份,并要细心耐心~~


后面会再出教程,不想做视频教程了,考考大家的思维能力与动手能力~~

美化OD教程

其实美化OD很简单,只需要用到 Restorator 这个工具,将原OD载入后,把原OD的位图一次性替换掉就可以了,如果用 Restorator 打不开位图资源,也可以用 PE Explorer 对位图进行一

个个的修改...

修改相关ANSI教程

其实也只需用到一个工具:FlexHEX 这款工具个人认为修改相关的ANSI最为好用,如将所有的 OllyDBG 修改成 -风 恋- 只需用 FlexHEX 这款工具打开OD Ctrl+H寻找关键词 OllyDBG 后在

下面的文本框中写入要替换的关键词 -风 恋-(注意字节平衡),先点继续,后点替换,直到绕过OllyDBG.INI文件就可以点全部替换, 修改CPU窗口标题也是用它,至于是那个,自己慢慢找

在这说不清楚.....


本期提问:美化OD并修改相关ANSI码,只用到两个工具,请问是那两个工具?  请跟贴回答(大牛路过,考小菜的~~)

最后请注意的是,在初次使用经修改最终定型的OD时,会提示要Path Classname 点是或确定就可以了,不用管它的 如果修改后不能运行的,可以用LordPE进行PE重建,重建后还不行的

只有再次修改OD,直到可以运行-----
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值