能力值:
(RANK:260 )
|
-
-
26 楼
汉化和调试技术不分家。
从数据入手找不到突破点,就从代码入手。
窗口标题的设定,无非是CreateWindow(Ex)()、SetWindowText()、SendMessage(hwnd,WM_SETTEXT,...)等,在适当的地方下断点,就可以找到相应的代码,从代码中分析出数据(字符串)的地址。
|
能力值:
( LV3,RANK:20 )
|
-
-
27 楼
书呆彭版主,谢谢你上次给我的回答。上面的内容你说的太抽象了。能列举出那些关键的代码吗?然后修改成什么样子。
bp CreateWindow(Ex) 提示“未知标识符”
|
能力值:
(RANK:260 )
|
-
-
28 楼
这样吧,我详细地说一下。看来你逆向的基础差了一些。CreateWindow和CreateWindowEx是两个API,而且二者都有A和W的版本。我那么写以为你知道这些呢。
我就随便修改一下,演示一下其中的方法吧。
用OD载入OD,我们把第一个做调试器的进程叫进程1,把被调试的进程叫进程2,以及区别。
载入后,下断点: bp CreateWindowExA,然后F9运行,马上中断,看堆栈: 0013F580 00435E68 /CALL 到 CreateWindowExA [COLOR="Red"]来自 OllyICE.00435E63[/COLOR]
0013F584 00000010 |ExtStyle = WS_EX_ACCEPTFILES
0013F588 004B7218 |Class = "pediy06"
0013F58C 004B71EE |WindowName = "OllyICE"
0013F590 02CF0000 |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
0013F594 00000004 |X = 4
0013F598 0000000F |Y = F (15.)
0013F59C 00000280 |Width = 280 (640.)
0013F5A0 000001E0 |Height = 1E0 (480.)
0013F5A4 00000000 |hParent = NULL
0013F5A8 00000000 |hMenu = NULL
0013F5AC 00400000 |hInst = 00400000
0013F5B0 00000000 \lParam = NULL
0013F5B4 00000000
0013F5B8 004B00C4 OllyICE.004B00C4
我们用鼠标选中“0013F580 00435E68 /CALL 到 CreateWindowExA 来自 OllyICE.00435E63”这一行,回车,反汇编窗口来到地址00435e63这里,往上翻一下,就到了创建窗口的地方,代码是这样的:
00435E31 > \8B0D 783B4D00 MOV ECX, DWORD PTR DS:[4D3B78] ; OllyICE.00400000
00435E37 . 6A 00 PUSH 0 ; /lParam = NULL
00435E39 . 51 PUSH ECX ; |hInst => 00400000
00435E3A . 6A 00 PUSH 0 ; |hMenu = NULL
00435E3C . 6A 00 PUSH 0 ; |hParent = NULL
00435E3E . 8B45 E8 MOV EAX, DWORD PTR SS:[EBP-18] ; |
00435E41 . 50 PUSH EAX ; |Height
00435E42 . 8B55 EC MOV EDX, DWORD PTR SS:[EBP-14] ; |
00435E45 . 52 PUSH EDX ; |Width
00435E46 . 8D96 08180000 LEA [COLOR="Red"]EDX[/COLOR], DWORD PTR DS:[ESI+1808] ; |
00435E4C . 8B4D F0 MOV ECX, DWORD PTR SS:[EBP-10] ; |
00435E4F . 51 PUSH ECX ; |Y
00435E50 . 8D8E 32180000 LEA ECX, DWORD PTR DS:[ESI+1832] ; |
00435E56 . 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C] ; |
00435E59 . 50 PUSH EAX ; |X
00435E5A . 68 0000CF02 PUSH 2CF0000 ; |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
00435E5F . 52 PUSH [COLOR="Red"]EDX[/COLOR] ; |[COLOR="Red"]WindowName[/COLOR]
00435E60 . 51 PUSH ECX ; |Class
00435E61 . 6A 10 PUSH 10 ; |ExtStyle = WS_EX_ACCEPTFILES
00435E63 . E8 34950700 CALL <JMP.&USER32.CreateWindowExA> ; \CreateWindowExA
00435E68 . A3 7C3B4D00 MOV DWORD PTR DS:[4D3B7C], EAX ; 这里就是返回地址
看一下OD分析出的注释,WindowName参数是放在edx中再进行入栈的,再往上看到给edx赋值的指令是lea edx, [esi+0x1808]
BCB使用WOL类库,ESI就是form的对象的指针,偏移0x1808处就是它的标题,但长度有限。
很幸运,“lea edx, [esi+0x1808]”这条指令6个字节长,足够我们写一条mov指令了。
现在我们寻找一块空闲的内存,通常只读的字符串可以直接在.text节的末尾找。我找到如下地址:
004AF7A0 > \83F8 76 CMP EAX, 76
004AF7A3 . 75 0A JNZ SHORT OllyICE.004AF7AF
004AF7A5 . BB 14000000 MOV EBX, 14
004AF7AA >^ E9 A239F7FF JMP OllyICE.00423151
004AF7AF > 833D 44274E00 01 CMP DWORD PTR DS:[4E2744], 1
004AF7B6 .^ E9 7B0CF7FF JMP OllyICE.00420436
004AF7BB 00 DB 00
004AF7BC 00 DB 00
004AF7BD 00 DB 00
004AF7BE 00 DB 00
004AF7BF 00 DB 00
004AF7C0 00 DB 00
004AF7C1 00 DB 00
004AF7C2 00 DB 00
004AF7C3 00 DB 00
004AF7C4 00 DB 00
004AF7C5 00 DB 00
004AF7C6 00 DB 00
004AF7C7 00 DB 00
004AF7C8 00 DB 00
004AF7C9 00 DB 00
004AF7CA 00 DB 00
004AF7CB 00 DB 00
004AF7CC 00 DB 00
004AF7CD 00 DB 00
004AF7CE 00 DB 00
004AF7CF 00 DB 00
004AF7D0 00 DB 00
004AF7D1 00 DB 00
004AF7D2 00 DB 00
可以看到这里是有效代码的最后了。我就在4af7c0这里写我自己的窗口标题,想写多长都行,只要别超出.text节的范围就行。如图:
然后我回到00435E46处,修改指令为:mov edx,0x4af7c0,它现在变成这样:
注:严格说来,这个地址需要重定位,但EXE文件通常不用重定位的。
00435E31 > \8B0D 783B4D00 MOV ECX, DWORD PTR DS:[4D3B78] ; OllyICE.00400000
00435E37 . 6A 00 PUSH 0 ; /lParam = NULL
00435E39 . 51 PUSH ECX ; |hInst => 00400000
00435E3A . 6A 00 PUSH 0 ; |hMenu = NULL
00435E3C . 6A 00 PUSH 0 ; |hParent = NULL
00435E3E . 8B45 E8 MOV EAX, DWORD PTR SS:[EBP-18] ; |
00435E41 . 50 PUSH EAX ; |Height
00435E42 . 8B55 EC MOV EDX, DWORD PTR SS:[EBP-14] ; |
00435E45 . 52 PUSH EDX ; |Width
[COLOR="Red"]00435E46 BA C0F74A00 MOV EDX, OllyICE.004AF7C0
00435E4B 90 NOP[/COLOR]
00435E4C . 8B4D F0 MOV ECX, DWORD PTR SS:[EBP-10] ; |
00435E4F . 51 PUSH ECX ; |Y
00435E50 . 8D8E 32180000 LEA ECX, DWORD PTR DS:[ESI+1832] ; |
00435E56 . 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C] ; |
00435E59 . 50 PUSH EAX ; |X
00435E5A . 68 0000CF02 PUSH 2CF0000 ; |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
00435E5F . 52 PUSH EDX ; |WindowName
00435E60 . 51 PUSH ECX ; |Class
00435E61 . 6A 10 PUSH 10 ; |ExtStyle = WS_EX_ACCEPTFILES
00435E63 . E8 34950700 CALL <JMP.&USER32.CreateWindowExA> ; \CreateWindowExA
00435E68 . A3 7C3B4D00 MOV DWORD PTR DS:[4D3B7C], EAX ; 这里就是返回地址
右键->复制到可执行文件->全部修改->全部保存;右键->保存文件。
现在我们来运行一下修改后的myolly.exe看看:
|
能力值:
( LV3,RANK:20 )
|
-
-
29 楼
书呆彭,很高兴认识你这样一个版主,复杂的问题,一下子就被你迎刃而解了!你把我的思路导向了正规方向,谢谢你!如果你还在看这个帖子,我要谢谢你一下。你是一个负责任的好版主。
下面两个问题,有点不清晰,你有兴致就说下好了,
[QUOTE=书呆彭;568303]
1、“lea edx, [esi+0x1808]”这条指令6个字节长,足够我们写一条mov指令了。
2、严格说来,这个地址需要重定位,但EXE文件通常不用重定位的。
[/QUOTE]
问题一:指令“8D8E 32180000”的字节长度为6,如果字节长度不够该怎么办?那就不能写指令了。
问题二:地址需要重定位,重定位操作指的是什么意思?如果这个程序要重定位,怎么重定位?
上面两个很菜的问题,你有时间就回答一下,毕竟这个帖子已经接近完美了,很多问题都解决了!
|
能力值:
(RANK:260 )
|
-
-
30 楼
1.指令的长度,在OD中反汇编窗口中第二列可以查看。如lea edx,[esi+0x1808]的机器码是8D96 08180000,显然它是6个字节。
实际上有些指令不查看也知道,因为它们是十分常见的,由于见得多了,不记也记住了,比如寄存器入栈、出栈都是单字节指令,retn指令是c3,int3指令是cc,单字节nop是90,等等。还有short jmp是双字节指令,第一字节是操作码,第二字节是转移偏移量。
比如给一个寄存器直接赋值的指令,如我修改的mov edx,XXXXXXXX,我知道它是5个字节的指令的。如果你不知道自己要修改的指令的长度,可以在OD里试一下,比如随便找一个地址。
如果由于指令长度的问题,无法通过只修改一条指令就达到目的,这种情况是很常见的。修改的方法就是先找一块空闲的地址空间,比如代码最后的大块的0的位置,把要添加的程序写好。然后到要修改的代码那里,用一条jmp指令跳到我们刚写的代码。由于一条near jmp指令是5个字节,而我们修改的那条指令长度不够,那么这条jmp指令就会破坏掉其后的其它指令,所以我们事先要先把这几条指令记下来。
修改成jmp后,对比一下记录下来的原来的程序,找到被jmp破坏的指令,补在我们添加的程序之后,最后再一条jmp指令回到正常的程序中即可。这种方法是很常用的很基础的一种打补丁的方法。
2.程序中所有出现绝对地址的地方,包括代码和数据,理论上都需要重定位。但是对EXE文件,操作系统的加载器正常情况下是可以保证将程序加载到默认基址上的,所以EXE文件实际上是不需要重定位的。如果对连接器和加载器的工作原理不太了解的话,可以先不用理会它。实际的逆向中,需要处理重定位的都是跟DLL文件有关的,如脱壳,如给DLL增加功能等。
对所涉及的代码重定位,只要在程序的重定位表中增加相应的内容就可以了。
|
能力值:
( LV3,RANK:20 )
|
-
-
31 楼
书呆彭版主,如果加载程序,标题还会变化
|
能力值:
(RANK:260 )
|
-
-
32 楼
无语了。
你不是已经搞定插件对标题的修改了吗?这跟那是同样的原理啊?
在SetWindowTextA下断点,修改。
|
能力值:
( LV3,RANK:20 )
|
-
-
33 楼
我按照修改插件的方法下断点“bp SetWindowTextA [esp+4]==xxxxxxxx”,但是出现了新问题,其他修改都不出现这个问题,不知道是不是我的堆栈平衡没选好,问题是点“快速加载程序”的时候,头一次没问题,第二次就弹出错误提示,如图:
00475BA5 |. 890D 785A4D00 mov dword ptr ds:[4D5A78],ecx
00475BAB |. E8 687AFBFF call OD加强版._Setcpu
00475BB0 |. 83C4 14 add esp,14
00475BB3 |. E8 54830100 call OD加强版.0048DF0C
00475BB8 |. A1 7C3B4D00 mov eax,dword ptr ds:[4D3B7C]
00475BBD |. 85C0 test eax,eax
00475BBF |. 74 0B je short OD加强版.00475BCC
00475BC1 |. 68 911A4C00 push OD加强版.004C1A91 ; /Text = "终结Θ者"
00475BC6 |. 50 push eax ; |hWnd => 006E03D2 ('☆终结者☆ - [PYG]',class='1212121')
[COLOR="Red"]00475BC7 E8 F2990300 call <jmp.&USER32.SetWindowTextA>[/COLOR]
00475BCC |> 6A 00 push 0
跟随到地址:
[COLOR="Red"]004AF5BE $- FF25 6CD95000 jmp dword ptr ds:[<&USER32.SetWindowText>; USER32.SetWindowTextA[/COLOR]
004AF5C4 $- FF25 70D95000 jmp dword ptr ds:[<&USER32.ShowCaret>] ; USER32.ShowCaret
004AF5CA $- FF25 74D95000 jmp dword ptr ds:[<&USER32.ShowScrollBar>; USER32.ShowScrollBar
004AF5D0 $- FF25 78D95000 jmp dword ptr ds:[<&USER32.ShowWindow>] ; USER32.ShowWindow
004AF5D6 $- FF25 7CD95000 jmp dword ptr ds:[<&USER32.SystemParamet>; USER32.SystemParametersInfoA
004AF5DC $- FF25 80D95000 jmp dword ptr ds:[<&USER32.TrackPopupMen>; USER32.TrackPopupMenu
004AF5E2 $- FF25 84D95000 jmp dword ptr ds:[<&USER32.TranslateMDIS>; USER32.TranslateMDISysAccel
004AF5E8 $- FF25 88D95000 jmp dword ptr ds:[<&USER32.TranslateMess>; USER32.TranslateMessage
004AF5EE $- FF25 8CD95000 jmp dword ptr ds:[<&USER32.UnregisterCla>; USER32.UnregisterClassA
004AF5F4 $- FF25 90D95000 jmp dword ptr ds:[<&USER32.UpdateWindow>>; USER32.UpdateWindow
004AF5FA $- FF25 94D95000 jmp dword ptr ds:[<&USER32.WinHelpA>] ; USER32.WinHelpA
004AF600 $- FF25 98D95000 jmp dword ptr ds:[<&USER32.WindowFromPoi>; USER32.WindowFromPoint
004AF606 $- FF25 9CD95000 jmp dword ptr ds:[<&USER32.wsprintfA>] ; USER32.wsprintfA
004AF60C $- FF25 A0D95000 jmp dword ptr ds:[<&USER32.wsprintfW>] ; USER32.wsprintfW
004AF612 CC int3
004AF613 CC int3
004AF614 $- FF25 B8D95000 jmp dword ptr ds:[<&OLE32.CoCreateInstan>; OLE32.CoCreateInstance
004AF61A $- FF25 BCD95000 jmp dword ptr ds:[<&OLE32.CoInitialize>] ; OLE32.CoInitialize
004AF620 $- FF25 C0D95000 jmp dword ptr ds:[<&OLE32.CoUninitialize>; OLE32.CoUninitialize
004AF626 CC int3
004AF627 CC int3
004AF628 . 33 32 2D 62 6>ascii "32-bit analysing"
004AF638 . 20 64 65 62 7>ascii " debugger",0
004AF642 00 db 00
004AF643 00 db 00
004AF644 > 51 push ecx
004AF645 . 50 push eax
004AF646 . 57 push edi
004AF647 . 8B7C24 0C mov edi,dword ptr ss:[esp+C]
004AF64B . 8B4C24 14 mov ecx,dword ptr ss:[esp+14]
004AF64F . B8 25000000 mov eax,25
004AF654 > F2:AE repne scas byte ptr es:[edi]
004AF656 . 83F9 00 cmp ecx,0
004AF659 . 74 06 je short OD加强版.004AF661
004AF65B . C647 FF 20 mov byte ptr ds:[edi-1],20
004AF65F .^ EB F3 jmp short OD加强版.004AF654
004AF661 > 5F pop edi
004AF662 . 58 pop eax
004AF663 . 59 pop ecx
004AF664 . 83C4 10 add esp,10
004AF667 . 3BC3 cmp eax,ebx
004AF669 .^ E9 E31CF8FF jmp OD加强版.00431351
004AF66E 00 db 00
004AF66F . 70 6C 75 67 6>ascii "plugin",0
004AF676 55444400 dd OD加强版.00444455
004AF67A > 60 pushad
004AF67B . BF 68384D00 mov edi,OD加强版.004D3868
004AF680 . 33C0 xor eax,eax
004AF682 . 33C9 xor ecx,ecx
004AF684 . 49 dec ecx
004AF685 . F2:AE repne scas byte ptr es:[edi]
004AF687 . F7D9 neg ecx
004AF689 . 49 dec ecx
004AF68A . 51 push ecx
004AF68B . BF 00AE5000 mov edi,OD加强版.0050AE00
004AF690 . 68 68384D00 push OD加强版.004D3868 ; /String2 = "C:\Documents and Settings\Xinwm\桌面\OllyDbg"
004AF695 . 57 push edi ; |String1 => OD加强版.0050AE00
004AF696 . E8 93FBFFFF call <jmp.&KERNEL32.lstrcpyA> ; \lstrcpyA
004AF69B . 59 pop ecx
004AF69C . C64439 FF 5C mov byte ptr ds:[ecx+edi-1],5C
004AF6A1 . C60439 00 mov byte ptr ds:[ecx+edi],0
004AF6A5 . 81C7 00010000 add edi,100
004AF6AB . 51 push ecx
004AF6AC . 68 00AE5000 push OD加强版.0050AE00 ; /String2 = ""
004AF6B1 . 57 push edi ; |String1 => OD加强版.0050AF00
004AF6B2 . E8 77FBFFFF call <jmp.&KERNEL32.lstrcpyA> ; \lstrcpyA
004AF6B7 . 59 pop ecx
004AF6B8 . 51 push ecx
004AF6B9 . 68 6FF64A00 push OD加强版.004AF66F ; /String2 = "plugin"
004AF6BE . 81EF 00010000 sub edi,100 ; |
004AF6C4 . 03F9 add edi,ecx ; |
004AF6C6 . 57 push edi ; |String1
004AF6C7 . E8 62FBFFFF call <jmp.&KERNEL32.lstrcpyA> ; \lstrcpyA
004AF6CC . 90 nop
004AF6CD . 68 76F64A00 push OD加强版.004AF676 ; /String2 = "UDD"
004AF6D2 . 81C7 00010000 add edi,100 ; |
004AF6D8 . 57 push edi ; |String1
004AF6D9 . E8 50FBFFFF call <jmp.&KERNEL32.lstrcpyA> ; \lstrcpyA
004AF6DE . 68 A4534D00 push OD加强版.004D53A4 ; /FileName = "C:\Documents and Settings\Xinwm\桌面\OllyDbg\.ini"
004AF6E3 . 68 00AF5000 push OD加强版.0050AF00 ; |String = ""
004AF6E8 . 68 FD744B00 push OD加强版.004B74FD ; |Key = "UDD path"
004AF6ED . 68 7E744B00 push OD加强版.004B747E ; |Section = "History"
004AF6F2 . E8 25FBFFFF call <jmp.&KERNEL32.WritePrivateProfileS>; \WritePrivateProfileStringA
004AF6F7 . 68 A4534D00 push OD加强版.004D53A4 ; /FileName = "C:\Documents and Settings\Xinwm\桌面\OllyDbg\.ini"
004AF6FC . 68 00AE5000 push OD加强版.0050AE00 ; |String = ""
004AF701 . 68 06754B00 push OD加强版.004B7506 ; |Key = "Plugin path"
004AF706 . 68 7E744B00 push OD加强版.004B747E ; |Section = "History"
004AF70B . E8 0CFBFFFF call <jmp.&KERNEL32.WritePrivateProfileS>; \WritePrivateProfileStringA
004AF710 . 59 pop ecx
004AF711 . 51 push ecx
004AF712 . BF 00AE5000 mov edi,OD加强版.0050AE00
004AF717 . 83C1 07 add ecx,7
004AF71A . 33C0 xor eax,eax
004AF71C . F3:AA rep stos byte ptr es:[edi]
004AF71E . 59 pop ecx
004AF71F . 83C1 04 add ecx,4
004AF722 . BF 00AF5000 mov edi,OD加强版.0050AF00
004AF727 . 33C0 xor eax,eax
004AF729 . F3:AA rep stos byte ptr es:[edi]
004AF72B . 61 popad
004AF72C . 68 027F0000 push 7F02
004AF731 . 68 7B734300 push OD加强版.0043737B
[COLOR="red"]004AF736 . C3 retn ; RET 用作跳转到 0043737B[/COLOR]
往下一直翻到出现第一个retn,所以我直接修改call <jmp.&USER32.SetWindowTextA>为NOP,但是用修改后的OD加载程序,多点几次快速加载,会弹出错误,不知道是不是我的修改问题,其他修改并没出现这样的错误。
如果最后出现的是“retn C070”,是不是要修改成“add esp,C070”?
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
你拿16楼改好的去改就好了嘛
|
能力值:
( LV3,RANK:20 )
|
-
-
35 楼
达文西,好!我试过了,他的修改方法不一样吧!而且他这个是修改好了的,在下断点bp SetWindowTextA [esp+4]==xxxxxxxx断不下来,因为主窗口标题不会变化!
另外一个问题是LEA EDX, DWORD PTR DS:[ESI+1808]在他那里是LEA EDX, DWORD PTR DS:[ESI+C019],但是我计算的偏移是6619,汇编中输入LEA EDX, DWORD PTR DS:[ESI+6619]提示“未知标识符”。
|
能力值:
(RANK:260 )
|
-
-
36 楼
你这只小木鱼是真的不懂编程还是怎么的,不知道灵活应用吗?
既然这样
00475BA5 |. 890D 785A4D00 mov dword ptr ds:[4D5A78],ecx
00475BAB |. E8 687AFBFF call OD加强版._Setcpu
00475BB0 |. 83C4 14 add esp,14
00475BB3 |. E8 54830100 call OD加强版.0048DF0C
00475BB8 |. A1 7C3B4D00 mov eax,dword ptr ds:[4D3B7C]
00475BBD |. 85C0 test eax,eax
00475BBF |. 74 0B je short OD加强版.00475BCC
00475BC1 |. 68 911A4C00 push OD加强版.[COLOR="Red"]004C1A91 [/COLOR] ; /[COLOR="Red"]Text = "终结Θ者"[/COLOR]
00475BC6 |. 50 push eax ; |hWnd => 006E03D2 ('☆终结者☆ - [PYG]',class='1212121')
00475BC7 E8 F2990300 call <jmp.&USER32.SetWindowTextA>
00475BCC |> 6A 00 push 0
很明显这个修改者也是patch过代码的,你就利用它的代码,把4c1a91这个值给它替换成自己的标题的地址不就行了?
还有这个:
004AF5BE $- FF25 6CD95000 jmp dword ptr ds:[<&USER32.SetWindowText>; USER32.SetWindowTextA
这是jmp到API入口,不是真正的API函数代码,你要找堆栈平衡,得看真正的函数的返回指令!
|
能力值:
( LV3,RANK:20 )
|
-
-
37 楼
不好意思发表愚见~!
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
你简直对不起书呆彭,都没理解人家的意思,不是在误解就是在曲解。
|
能力值:
( LV3,RANK:20 )
|
-
-
39 楼
版主结帖~!
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
无话可说。
我脾气火爆,如果我也说了书呆彭这么多你没明白,我早粗口了。
送出一句话:准确理解,灵活运用!
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
书老大,谢谢,,,,讲的非常的详细,,,,,让我也学习了一会
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
很好的氛围。
|
能力值:
( LV6,RANK:90 )
|
-
-
43 楼
改这些都是虚的,StrongOD才是王道。
|
能力值:
( LV9,RANK:450 )
|
-
-
44 楼
给你个我的。自己去修改标题吧。长度比较自由。
这个版本修改了拖拽问题件后标题显示,修改了OD作为默认调试器处理程序时的标题显示,修改了OD附加进程时的标题显示。总之前面的名字不管你什么方式加载程序都保持不变
|
能力值:
( LV3,RANK:20 )
|
-
-
45 楼
书呆彭版主回答的太详细了。学习 了
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
真的可以吗 看看
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
我晕 没有钱
|
|
|