【破文标题】 Mr.Captor V2.3 破解分析
【破文作者】 weiyi75[Dfcg]
【作者邮箱】 [email]weiyi75@sohu.com[/email]
【作者主页】 Dfcg官方大本营 ---
www.chinadfcg.com
【使用工具】 peid,w32dasm,olldbg,keymake
【破解平台】 Win2000
【软件名称】 Mr.Captor V2.3
【下载地址】
本地下载
【软件简介】 Mr.Captor 是一个非常好用的屏幕截图程序!他除了一般抓图工具具有的功能之外,还可以进行屏幕录像,并可以将结果保存为BMP, PCX, GIF, JPEG, PNG, TIFF, TGA, CUR, ICO, AVI等多种格式!他还支持滚动截图,现在可以抓下整个网页了。右图即为Mr.Captor所捕捉。
【软件大小】 1.42M
【破解目的】 学习olldbg动态跟踪程序,寻找注册码。这里没有研究软件算法,其实现在我还不懂算法。
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
------------------------------------------------------------
【详细过程】
这个软件是我写爱的中体验之Armadillo3.x双进程之Mr.Captor V2.7 的脱壳文章找不到目标软件,在百度引擎里面搜索无意中找到的,由于感觉汉化精美,虽然版本很旧,试了一下功能还可以,不忍删除。汉化使用说明已经有注册码,但二哥有个习惯,不喜欢用别人的注册机和非自己姓名的固定注册码,除非自己没有破解能力时。今天就看了一下这个程序,黑名单校验,明码注册方式。
几天前装的,今天想在看看。启动就过期,直接弹出注册画面。后悔平时没有练习CrackMe,可我要用它,又不想用别人的注册码,只好自己动手了。
先观察一下注册方式和漏洞提示,什么也没有输或输入错误信息,确定注册弹出漏洞提示注册码错误,其它的没什么破绽。
关闭程序,Peid查程序为Microsoft Visual C++ 6.0 [Overlay],今天来个实时校验注册跟踪。
OD载入程序,F9运行。
命令行下断点
bp GetWindowTextA //当然它优先考虑
用户输入
Mr.David
注册码输入
88888888
F9运行中断两处后取消断点,Ctrl+F9执行到程序领空,取消断点。
第一次中断取用户名,第二次中断取注册码,然后返回程序领空,GetWindowTextA只负责获取文本框中的内容,比较注册码真伪可不是它的事情。
中断1
77DFCF80 > 55 PUSH EBP
77DFCF81 8BEC MOV EBP,ESP
77DFCF83 6A FF PUSH -1
77DFCF85 68 10D0DF77 PUSH USER32.77DFD010
77DFCF8A 68 4716E477 PUSH USER32.77E41647
77DFCF8F 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
77DFCF95 50 PUSH EAX
77DFCF96 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
77DFCF9D 51 PUSH ECX
77DFCF9E 51 PUSH ECX
77DFCF9F 51 PUSH ECX
77DFCFA0 53 PUSH EBX
77DFCFA1 56 PUSH ESI
77DFCFA2 57 PUSH EDI
77DFCFA3 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
77DFCFA6 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
77DFCFA9 85FF TEST EDI,EDI
77DFCFAB 0F84 19DE0100 JE USER32.77E1ADCA
中断2
77DFCF80 > 55 PUSH EBP //双击取消断点。
77DFCF81 8BEC MOV EBP,ESP
77DFCF83 6A FF PUSH -1
77DFCF85 68 10D0DF77 PUSH USER32.77DFD010
77DFCF8A 68 4716E477 PUSH USER32.77E41647
77DFCF8F 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
77DFCF95 50 PUSH EAX
77DFCF96 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
77DFCF9D 51 PUSH ECX
77DFCF9E 51 PUSH ECX
77DFCF9F 51 PUSH ECX
77DFCFA0 53 PUSH EBX
77DFCFA1 56 PUSH ESI
77DFCFA2 57 PUSH EDI
77DFCFA3 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
77DFCFA6 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
77DFCFA9 85FF TEST EDI,EDI
77DFCFAB 0F84 19DE0100 JE USER32.77E1ADCA
Ctrl+F9 返回
77DFD001 C2 0C00 RETN 0C //F8步过
00464AC4 |. FF15 DC064800 CALL DWORD PTR DS:[<&USER32.GetWindowTex>; \GetWindowTextA
00464ACA |. 8B4D 10 MOV ECX,DWORD PTR SS:[EBP+10] //返回到这里,好啦,下面F8慢慢步过每个代码,遇到Call时先看旁边有没有跳转,没有时无需跟进去,注意各个寄存器的值和堆栈内容,及信息框提示。虽然我们爆破者不分析算法,但动态跟踪的火眼精睛术决不会输与算法分析的人,同样要判断动脑筋。
00464ACD |. 6A FF PUSH -1
00464ACF |. E8 6748FFFF CALL MrCaptor.0045933B
00464AD4 |. EB 0B JMP SHORT MrCaptor.00464AE1
00464AE1 |> \5F POP EDI ; 0012FEDC
00464AE2 |. 5E POP ESI
00464AE3 |. 5D POP EBP
00464AE4 \. C2 0C00 RETN 0C
004361D0 . 6A 28 PUSH 28
004361D2 . 57 PUSH EDI
004361D3 . 56 PUSH ESI
004361D4 . E8 B2EA0200 CALL MrCaptor.00464C8B
004361D9 . 5F POP EDI
004361DA . 5E POP ESI
004361DB . 5B POP EBX
004361DC . C2 0400 RETN 4
0045C002 . C745 08 01000>MOV DWORD PTR SS:[EBP+8],1
0045C009 . EB 27 JMP SHORT MrCaptor.0045C032
0045C032 > \8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
0045C035 . 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
0045C038 . 8987 B8000000 MOV DWORD PTR DS:[EDI+B8],EAX
0045C03E . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0045C041 . 5F POP EDI
0045C042 . 5E POP ESI
0045C043 . 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0045C04A . 5B POP EBX
0045C04B . C9 LEAVE
0045C04C . C2 0400 RETN 4
004361FC . 8D5E 5C LEA EBX,DWORD PTR DS:[ESI+5C]
004361FF . 8D6E 60 LEA EBP,DWORD PTR DS:[ESI+60]
00436202 . 53 PUSH EBX
00436203 . 55 PUSH EBP
00436204 . E8 37F0FFFF CALL MrCaptor.00435240 //这个一看就是关键Call,写注册机就要F7跟进去
00436209 . 83C4 08 ADD ESP,8
0043620C . 85C0 TEST EAX,EAX
0043620E . 74 36 JE SHORT MrCaptor.00436246 //爆破点,从这里开始分界,不跳走即可注册成功。爆过一些程序后发现,有些共享软件作者喜欢偷懒,实时比较和启动时校验注册码真伪喜欢用一个公共Call,那我们看看这个程序是不是也是一样的,转标签1
00436210 . 57 PUSH EDI
00436211 . E8 32AC0300 CALL MrCaptor.00470E48
00436216 . 8B78 04 MOV EDI,DWORD PTR DS:[EAX+4]
00436219 . 55 PUSH EBP
0043621A . 8D8F 64020000 LEA ECX,DWORD PTR DS:[EDI+264]
00436220 . E8 112E0200 CALL MrCaptor.00459036
00436225 . 53 PUSH EBX
00436226 . 8D8F 68020000 LEA ECX,DWORD PTR DS:[EDI+268]
0043622C . E8 052E0200 CALL MrCaptor.00459036
00436231 . 8BCF MOV ECX,EDI
00436233 . E8 B821FFFF CALL MrCaptor.004283F0
00436238 . 6A 01 PUSH 1
0043623A . 8BCE MOV ECX,ESI
0043623C . E8 17820200 CALL MrCaptor.0045E458
00436241 . 5F POP EDI
00436242 . 5E POP ESI
00436243 . 5D POP EBP
00436244 . 5B POP EBX
00436245 . C3 RETN
00436246 > 68 73E70000 PUSH 0E773
0043624B . E8 E09EFDFF CALL MrCaptor.00410130
00436250 . 83C4 04 ADD ESP,4
00436253 . 5E POP ESI
00436254 . 5D POP EBP
00436255 . 5B POP EBX
00436256 . C3 RETN
.............................................................
标签1
* Referenced by a CALL at Addresses:
|:00428D96 , :00436204 //00436204是实时比较Call,那00428D96肯定就是启动比较Call了,去哪里看看。转标签2
|
:00435240 6AFF push FFFFFFFF
:00435242 6818D14700 push 0047D118
:00435247 64A100000000 mov eax, dword ptr fs:[00000000]
:0043524D 50 push eax
:0043524E 64892500000000 mov dword ptr fs:[00000000], esp
:00435255 51 push ecx
:00435256 A110D24900 mov eax, dword ptr [0049D210]
:0043525B 53 push ebx
:0043525C 56 push esi
:0043525D 57 push edi
:0043525E 8944240C mov dword ptr [esp+0C], eax
:00435262 8B542420 mov edx, dword ptr [esp+20]
:00435266 8D4C240C lea ecx, dword ptr [esp+0C]
:0043526A 51 push ecx
:0043526B 52 push edx
:0043526C C744242000000000 mov [esp+20], 00000000
:00435274 E877FEFFFF call 004350F0
:00435279 8B7C242C mov edi, dword ptr [esp+2C]
:0043527D 83C408 add esp, 00000008
* Possible Indirect StringData Ref from Data Obj ->"Mz9CSkwtGy4CBgwjETNufkMBHxEX" //这个可不是注册码,是黑名单,后来知道的。
|
:00435280 BE5CCC4900 mov esi, 0049CC5C
........................................................................
标签2
:00428D96 E8A5C40000 call 00435240
:00428D9B 83C408 add esp, 00000008
:00428D9E 85C0 test eax, eax
:00428DA0 754B jne 00428DED //爆破点,我们修改为je 00428DED后,程序爆破了,看关于注册给?,抓图时也没有没注册的标记,但感觉不爽。
* Possible StringData Ref from Data Obj ->"?"
|
:00428DA2 684CC54900 push 0049C54C
:00428DA7 8BCB mov ecx, ebx
:00428DA9 E8D8020300 call 00459086
* Possible StringData Ref from Data Obj ->"?"
|
:00428DAE 684CC54900 push 0049C54C
:00428DB3 8BCF mov ecx, edi
:00428DB5 E8CC020300 call 00459086
:00428DBA 8D86A8020000 lea eax, dword ptr [esi+000002A8]
:00428DC0 8D8EA4020000 lea ecx, dword ptr [esi+000002A4]
:00428DC6 50 push eax
:00428DC7 51 push ecx
:00428DC8 E863BC0000 call 00434A30
:00428DCD 8BE8 mov ebp, eax
:00428DCF 83C408 add esp, 00000008
:00428DD2 83FD04 cmp ebp, 00000004
:00428DD5 7740 ja 00428E17
.....................................................................
为了写出注册机,我们用OD动态跟踪
00436204 . E8 37F0FFFF CALL MrCaptor.00435240 //这个一看就是关键Call,写注册机就要F7跟进去
00435240 /$ 6A FF PUSH -1
00435242 |. 68 18D14700 PUSH MrCaptor.0047D118 ; SE handler installation
00435247 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0043524D |. 50 PUSH EAX
0043524E |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00435255 |. 51 PUSH ECX
00435256 |. A1 10D24900 MOV EAX,DWORD PTR DS:[49D210]
0043525B |. 53 PUSH EBX
0043525C |. 56 PUSH ESI
0043525D |. 57 PUSH EDI
0043525E |. 894424 0C MOV DWORD PTR SS:[ESP+C],EAX
00435262 |. 8B5424 20 MOV EDX,DWORD PTR SS:[ESP+20]
00435266 |. 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
0043526A |. 51 PUSH ECX
0043526B |. 52 PUSH EDX
0043526C |. C74424 20 000>MOV DWORD PTR SS:[ESP+20],0
00435274 |. E8 77FEFFFF CALL MrCaptor.004350F0 //我们跟踪时多次发现"PYH"字符,不清楚是什么意思。
00435279 |. 8B7C24 2C MOV EDI,DWORD PTR SS:[ESP+2C] //这句过后,我们在堆栈里看到
堆栈内容
0012F970 0012F980
0012F974 0012FE7C ASCII "PYH"
0012F978 0012FE7C ASCII "PYH"
0012F97C 0012FED8
0012F980 009C7208 ASCII "LCgNYEQ2Ez4OdCEdGCJQJkNTEQsN" //注册码?不忙,写注册机一般位于Call xxxxx 地址处,尽量取寄存器地址,内存地址也可以,先看看流程。
0043527D |. 83C4 08 ADD ESP,8
00435280 |. BE 5CCC4900 MOV ESI,MrCaptor.0049CC5C
00435285 |> 8B06 /MOV EAX,DWORD PTR DS:[ESI]
00435287 |. 8D4C24 20 |LEA ECX,DWORD PTR SS:[ESP+20]
0043528B |. 50 |PUSH EAX
0043528C |. E8 DA3C0200 |CALL MrCaptor.00458F6B //这句过后看到寄存器EAX出现注册码?
EAX Mz9CSkwtGy4CBgwjETNufkMBHxEX 将这个注册码填入程序中
程序告诉你,这个注册码已经列入黑名单。
继续往下看吧。
00435291 |. 8B0F |MOV ECX,DWORD PTR DS:[EDI] ECX=88888888 //假码
00435293 |. 8B00 |MOV EAX,DWORD PTR DS:[EAX] EAX=Mz9CSkwtGy4CBgwjETNufkMBHxEX //黑名单
00435295 |. 51 |PUSH ECX ; /Arg2
00435296 |. 50 |PUSH EAX ; |Arg1
00435297 |. E8 B2970000 |CALL MrCaptor.0043EA4E //到这里,我们就可以写内存注册机了。
呵呵,在00435297下断点,F9运行不断中断看看有多少黑名单上的人,转标签3
此时堆栈内容
0012F96C 009C7258 |Arg1 = 009C7258 ASCII "Mz9CSkwtGy4CBgwjETNufkMBHxEX" //黑名单
0012F970 009C72A8 \Arg2 = 009C72A8 ASCII "99999999" //假注册码
0012F974 0012FE7C ASCII "PYH"
0012F978 0012FE7C ASCII "PYH"
0012F97C 0012FED8
0012F980 009C7208 ASCII "LCgNYEQ2Ez4OdCEdGCJQJkNTEQsN" //真注册码
0043529C |. 83C4 08 |ADD ESP,8
0043529F |. 8D4C24 20 |LEA ECX,DWORD PTR SS:[ESP+20]
004352A3 |. 85C0 |TEST EAX,EAX
004352A5 |. 0F94C3 |SETE BL
004352A8 |. E8 503C0200 |CALL MrCaptor.00458EFD
004352AD |. 84DB |TEST BL,BL
.................................................................
标签3
四个黑名单上的人
0012F96C 009C7258 |Arg1 = 009C7258 ASCII "Mz9CSkwtGy4CBgwjETNufkMBHxEX"
0012F96C 009C7258 |Arg1 = 009C7258 ASCII "MipMSkIlWg8GdDEdGihFflMBHRsC"
0012F96C 009C7258 |Arg1 = 009C7258 ASCII "Nz9TQVcnHzQJJisHEiNBJ0gRGR4H"
0012F96C 009C7258 |Arg1 = 009C7258 ASCII "MipKQEASWnUsFR0sNyJQJkNTEQsN"
真注册码始终不变
0012F980 009C7208 ASCII "LCgNYEQ2Ez4OdCEdGCJQJkNTEQsN"
既然注册码已经得到,就不继续分析了,写内存注册机吧。
【破解小结】
爆破程序
0043620E . 74 36 JE SHORT MrCaptor.00436246
改为
0043620E . 75 36 JNE SHORT MrCaptor.00436246
00428DA0 754B jne 00428DED
改为
00428DA0 744B je 00428DED
内存注册机
中断地址: 436204
第一字节 E8
指令长度 5
继续添加数据
中断地址: 435297
中断次数: 1
第一字节: E8
指令长度: 5
内存地址
9C7208 //这个地址最关键,存放真注册码
又测试了一下,发现这样做的注册机无法跨平台。
回想一下这里
00435274 |. E8 77FEFFFF CALL MrCaptor.004350F0 //我们跟踪时多次发现"PYH"字符,不清楚是什么意思。
00435279 |. 8B7C24 2C MOV EDI,DWORD PTR SS:[ESP+2C] //这句过后,我们在堆栈里看到
堆栈内容
0012F970 0012F980
0012F974 0012FE7C ASCII "PYH"
0012F978 0012FE7C ASCII "PYH"
0012F97C 0012FED8
0012F980 009C7208 ASCII "LCgNYEQ2Ez4OdCEdGCJQJkNTEQsN" //注册码?不忙,写注册机一般位于Call xxxxx 地址处,尽量取寄存器地址,内存地址也可以,先看看流程。
于是我们F7跟进 CALL MrCaptor.004350F0
004350F0 /$ 6A FF PUSH -1
004350F2 |. 68 F8D04700 PUSH MrCaptor.0047D0F8 ; SE handler installation
004350F7 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
004350FD |. 50 PUSH EAX
004350FE |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00435105 |. 83EC 78 SUB ESP,78
00435108 |. 56 PUSH ESI
00435109 |. 57 PUSH EDI
0043510A |. B9 08000000 MOV ECX,8
0043510F |. BE 64CD4900 MOV ESI,MrCaptor.0049CD64 ; ASCII "blgsprv crjhc srhbvxc dryhbcgyh"
00435114 |. 8D7C24 3C LEA EDI,DWORD PTR SS:[ESP+3C]
00435118 |. 33C0 XOR EAX,EAX
0043511A |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
0043511C |. B9 08000000 MOV ECX,8
00435121 |. BE 40CD4900 MOV ESI,MrCaptor.0049CD40 ; ASCII "aZ#$%@zZmTRop@&^ suytre uyui &^%$"
00435126 |. 8D7C24 5C LEA EDI,DWORD PTR SS:[ESP+5C]
0043512A |. 894424 08 MOV DWORD PTR SS:[ESP+8],EAX
0043512E |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
00435130 |. 8B8C24 900000>MOV ECX,DWORD PTR SS:[ESP+90]
00435137 |. 894424 0C MOV DWORD PTR SS:[ESP+C],EAX
0043513B |. 894424 10 MOV DWORD PTR SS:[ESP+10],EAX
0043513F |. 894424 14 MOV DWORD PTR SS:[ESP+14],EAX
00435143 |. 894424 18 MOV DWORD PTR SS:[ESP+18],EAX
00435147 |. 66:894424 1C MOV WORD PTR SS:[ESP+1C],AX
0043514C |. 8B01 MOV EAX,DWORD PTR DS:[ECX]
0043514E |. 66:A5 MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]
00435150 |. 8B48 F8 MOV ECX,DWORD PTR DS:[EAX-8]
00435153 |. 83F9 15 CMP ECX,15
00435156 |. 72 05 JB SHORT MrCaptor.0043515D
00435158 |. B9 15000000 MOV ECX,15
0043515D |> 51 PUSH ECX
0043515E |. 8D5424 0C LEA EDX,DWORD PTR SS:[ESP+C]
00435162 |. 50 PUSH EAX
00435163 |. 52 PUSH EDX
00435164 |. E8 A7A40000 CALL MrCaptor.0043F610
00435169 |. 8D7C24 48 LEA EDI,DWORD PTR SS:[ESP+48]
0043516D |. 83C9 FF OR ECX,FFFFFFFF
00435170 |. 33C0 XOR EAX,EAX
00435172 |. 83C4 0C ADD ESP,0C
00435175 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00435177 |. F7D1 NOT ECX
00435179 |. 49 DEC ECX
0043517A |. 8D7C24 08 LEA EDI,DWORD PTR SS:[ESP+8]
0043517E |. 8BF1 MOV ESI,ECX
00435180 |. 83C9 FF OR ECX,FFFFFFFF
00435183 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00435185 |. F7D1 NOT ECX
00435187 |. 49 DEC ECX
00435188 |. 33D2 XOR EDX,EDX
0043518A |. 85C9 TEST ECX,ECX
0043518C |. 7E 0C JLE SHORT MrCaptor.0043519A
0043518E |> 0FBE7C14 08 /MOVSX EDI,BYTE PTR SS:[ESP+EDX+8]
00435193 |. 03C7 |ADD EAX,EDI
00435195 |. 42 |INC EDX
00435196 |. 3BD1 |CMP EDX,ECX
00435198 |.^ 7C F4 \JL SHORT MrCaptor.0043518E
0043519A |> 33D2 XOR EDX,EDX
0043519C |. F7F6 DIV ESI
0043519E |. 83F9 15 CMP ECX,15
004351A1 |. 8D4414 3C LEA EAX,DWORD PTR SS:[ESP+EDX+3C]
004351A5 |. 73 1D JNB SHORT MrCaptor.004351C4
004351A7 |> 8BD0 /MOV EDX,EAX
004351A9 |. 8D7C24 3C |LEA EDI,DWORD PTR SS:[ESP+3C]
004351AD |. 2BD7 |SUB EDX,EDI
004351AF |. 3BD6 |CMP EDX,ESI
004351B1 |. 7C 04 |JL SHORT MrCaptor.004351B7
004351B3 |. 8D4424 3C |LEA EAX,DWORD PTR SS:[ESP+3C]
004351B7 |> 8A10 |MOV DL,BYTE PTR DS:[EAX]
004351B9 |. 40 |INC EAX
004351BA |. 88540C 08 |MOV BYTE PTR SS:[ESP+ECX+8],DL
004351BE |. 41 |INC ECX
004351BF |. 83F9 15 |CMP ECX,15
004351C2 |.^ 72 E3 \JB SHORT MrCaptor.004351A7
004351C4 |> 8D4424 5C LEA EAX,DWORD PTR SS:[ESP+5C]
004351C8 |. 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
004351CC |. 50 PUSH EAX
004351CD |. 51 PUSH ECX
004351CE |. E8 EDFBFFFF CALL MrCaptor.00434DC0
004351D3 |. 83C4 08 ADD ESP,8
004351D6 |. 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20]
004351DA |. E8 E1C3FCFF CALL MrCaptor.004015C0
004351DF |. 8D5424 08 LEA EDX,DWORD PTR SS:[ESP+8]
004351E3 |. 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20]
004351E7 |. 52 PUSH EDX
004351E8 |. C78424 8C0000>MOV DWORD PTR SS:[ESP+8C],0
004351F3 |. E8 88C6FCFF CALL MrCaptor.00401880
004351F8 |. 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20]
004351FC |. E8 3FC4FCFF CALL MrCaptor.00401640
00435201 |. 8B8C24 940000>MOV ECX,DWORD PTR SS:[ESP+94]
00435208 |. 50 PUSH EAX //经过上面一大堆复杂算法得出
EAX=LCgNYEQ2Ez4OdCEdGCJQJkNTEQsN
呵呵,谢了
00435209 |. E8 783E0200 CALL MrCaptor.00459086
..........................................................
于是修正
内存注册机
中断地址: 436204
第一字节 E8
指令长度 5
继续添加数据
中断地址: 435209
中断次数: 1
第一字节: E8
指令长度: 5
内存方式
寄存器 EAX
有改进才会有进步。
再狡猾的狐狸也逃不过猎人的眼睛。
请看胜利截图,就是用Mr.Captor截取的。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!