我们今天要修改里面ollydbg.ini的路径
[History]
Data directory=.\udd
Standard library directory=.\dll
Plugin directory=.\plugin
将ollydbg.exe载入od,我们对KERNEL32.WritePrivateProfileStringW下断点,F9后程序中断在下面:
004015FA |. E8 CD410F00 call <jmp.&KERNEL32.WritePrivateProfi>; \WritePrivateProfileStringW
004015FF |. 5F pop edi
00401600 |. 5E pop esi
00401601 |. 5B pop ebx
00401602 |. 8BE5 mov esp, ebp
00401604 |. 5D pop ebp
00401605 \. C3 retn
这个不重要,因为程序运行后并没有修改ollydbg.ini里面的路径内容,只是程序退出时才会修改里面的路径内容。
所以我们一直按F5,直至完全运行,然后关闭程序。程序也中断在上面那里:
004015FA |. E8 CD410F00 call <jmp.&KERNEL32.WritePrivateProfi>; \WritePrivateProfileStringW
004015FF |. 5F pop edi
00401600 |. 5E pop esi
00401601 |. 5B pop ebx
00401602 |. 8BE5 mov esp, ebp
00401604 |. 5D pop ebp
00401605 \. C3 retn
此时注意堆栈的数值,直至出现
0012CF40 004F66DA |Section = "History"
0012CF44 0051470E |Key = "Data directory"
0012CF48 0012CF5C |String = "C:\Users\Administrator\Desktop\OllyDBG v2.01 Final Version + Highlight theme + all latest compitable Plugins (2013.10.01)\udd"
0012CF4C 0057F208 \FileName = "C:\Users\Administrator\Desktop\OllyDBG v2.01 Final Version + Highlight theme + all latest compitable Plugins (2013.10.01)\ollydbg0.ini"
我们按F8直到返回:
00402920 |. E8 3FECFFFF call 00401564 ; \刚才调用的call,这里写入ollydbg.ini
00402925 |. 83C4 10 add esp, 0x10 ; 程序返回到这里
00402928 |> 5F pop edi
00402929 |. 5E pop esi
0040292A |. 5B pop ebx
0040292B |. 5D pop ebp
0040292C \. C3 retn
我们按F8直到返回:
0040CE4D |. /75 17 |jnz short 0040CE66 ; 我们在这里设断点
0040CE4F |. |8B4B 0C |mov ecx, dword ptr [ebx+0xC]
0040CE52 |. |51 |push ecx ; /Arg2
0040CE53 |. |8D85 68FDFFFF |lea eax, dword ptr [ebp-0x298] ; |
0040CE59 |. |50 |push eax ; |Arg1
0040CE5A |. |E8 15AB0D00 |call 004E7974 ; \ollydbg0.004E7974
0040CE5F |. |83C4 08 |add esp, 0x8
0040CE62 |. |85C0 |test eax, eax
0040CE64 |. |74 10 |je short 0040CE76 ; 这里可以跳过下面的call
0040CE66 |> \8B13 |mov edx, dword ptr [ebx]
0040CE68 |. 52 |push edx ; /Arg3
0040CE69 |. 8B4B 08 |mov ecx, dword ptr [ebx+0x8] ; |
0040CE6C |. 51 |push ecx ; |Arg2
0040CE6D |. 57 |push edi ; |Arg1
0040CE6E |. E8 4D5AFFFF |call 004028C0 ; \ollydbg0.004028C0
0040CE73 |. 83C4 0C |add esp, 0xC ; 程序返回到这里
0040CE76 |> 83C3 10 |add ebx, 0x10
0040CE79 |> 8B03 mov eax, dword ptr [ebx]
0040CE7B |. 85C0 |test eax, eax
0040CE7D |.^ 75 A4 \jnz short 0040CE23
我们在0040CE4D处设断点,并取消之前的断点,继续F9,程序再次中断在0040CE4D,此时我们查看寄存器的内容:
EAX 00000005
ECX 0012EFA0 UNICODE ".\dll"
EDX 00000000
EBX 0050EBBC ollydbg0.0050EBBC
ESP 0012EF94
EBP 0012F238
ESI 00000001
EDI 0057F208 UNICODE "C:\Users\Administrator\Desktop\OllyDBG v2.01 Final"
我们发现ecx保存的是类似路径的内容,所以我们在这里打补丁:
在0040CE4B修改为:
0040CE4B /E9 1A8E0E00 jmp 004F5C6A
0040CE50 |90 nop
0040CE51 |90 nop
004F5C6A 8BFF mov edi, edi
004F5C6C 81F9 00001200 cmp ecx, 0x120000
004F5C72 7E 15 jle short 004F5C89
004F5C74 50 push eax
004F5C75 8A01 mov al, byte ptr [ecx]
004F5C77 3C 2E cmp al, 0x2E
004F5C79 58 pop eax
004F5C7A 75 0D jnz short 004F5C89
004F5C7C 50 push eax
004F5C7D 8A41 02 mov al, byte ptr [ecx+0x2]
004F5C80 3C 00 cmp al, 0x0
004F5C82 58 pop eax
004F5C83 ^ 0F85 ED71F1FF jnz 0040CE76
004F5C89 85F6 test esi, esi
004F5C8B ^ 0F85 D571F1FF jnz 0040CE66
004F5C91 8B4B 0C mov ecx, dword ptr [ebx+0xC]
004F5C94 ^ E9 B971F1FF jmp 0040CE52
其实就是查看ecx的内容是否含有.\
至此已经修改完毕