重启验证文字版
在看了第五课的视频,结合自己的操作,写了一个文字版,本人小白一个,错误地方指导,不要喷。来主题。实例程序:52PoJie培训程序
OD载入程序,在汇编窗口,右击-中文搜索引擎-3 智能搜索,搜索“重启验证1”。
2018-03-29_13-07-09.jpg
Server (IO) Error
图片不知不能上传,提示Server (IO) Error,不知就什么原因,知道的能告知下了。
004027C4 push 52PoJie?00544660 你选择的验证类型是重启验证1
选中地址004027C4行,双击当前行,来到反汇编窗口 。
004027C2 |. 6A 00 push 0x0
004027C4 |. 68 60465400 push 52PoJie?00544660 ; 你选择的验证类型是重启验证1 //跳转到地址
004027C9 |. E8 B17F0000 call 52PoJie?0040A77F
找到程序段的段首,设置断点 。
004026F0 |. 55 push ebp //到段首,设置断点
004026F1 |. 8BEC mov ebp,esp
004026F3 |. 6A FF push -0x1
在遇到call XXXXXX,带地址的,单步往下运行时,注意查看各窗口提示信息。
0040275B |. E8 C8590100 call 52PoJie?00418128 //带地址的call,注意查看下个地址各窗口信息
00402760 |. 8B45 EC mov eax, ; 52PoJie?0058E5F0
00402763 |. 8378 F4 00 cmp dword ptr ds:,0x0
在地址00402760,反汇编窗口信息窗口显示输入的假码。
00402760 |. 8B45 EC mov eax,
堆栈 ss:=0020B9B0, (ASCII "1234567890")
eax=0020B9B0, (ASCII "1234567890")
运行到地址00402769,KERNEL32.CreateFile函数,创建一个文件52Pojie.txt。
00402767 |. /74 74 je short 52PoJie?004027DD
00402769 |. |6A 00 push 0x0 ; /hTemplateFile = NULL
0040276B |. |6A 00 push 0x0 ; |Attributes = 0
0040276D |. |6A 02 push 0x2 ; |Mode = CREATE_ALWAYS
0040276F |. |6A 00 push 0x0 ; |pSecurity = NULL
00402771 |. |6A 01 push 0x1 ; |ShareMode = FILE_SHARE_READ
00402773 |. |68 00000040 push 0x40000000 ; |Access = GENERIC_WRITE
00402778 |. |FFB6 BC000000 push dword ptr ds: ; |FileName = "E:\_破解学习\_脱壳视频二\05 反击作者的挑衅--实战解除程序重启验证\52Pojie.txt"
0040277E |. |FF15 10345400 call dword ptr ds:[<&KERNEL32.CreateFile>; \CreateFileA //创建52Pojie.txt文件,KERNEL32.CreateFile函数
00402784 |. |8BF0 mov esi,eax
地址004027B6,KERNEL32.WriteFile函数,写入输入假码到文件52Pojie.txt。
004027AD |> \6A 00 push 0x0 ; /pOverlapped = NULL
004027AF |. 8D45 E8 lea eax, ; |
004027B2 |. 50 push eax ; |pBytesWritten = 00000001
004027B3 |. 57 push edi ; |nBytesToWrite = A (10.)
004027B4 |. 51 push ecx ; |Buffer = kernel32.7C81138E
004027B5 |. 56 push esi ; |hFile = 00000234 (window)
004027B6 |. FF15 2C345400 call dword ptr ds:[<&KERNEL32.WriteFile>>; \WriteFile //写入输入假码,KERNEL32.WriteFile函数
004027BC |. 85C0 test eax,eax
写好假码,弹窗提示重启验证,退出程序。
004027C4 |. 68 60465400 push 52PoJie?00544660 ; 你选择的验证类型是重启验证1
004027C9 |. E8 B17F0000 call 52PoJie?0040A77F //弹窗提示
004027CE |. 6A 00 push 0x0 ; /ExitCode = 0x0 //退出程序
004027D0 |. FF15 40385400 call dword ptr ds:[<&USER32.PostQuitMess>; \PostQuitMessage
重新载入程序,汇编窗口,右击-中文搜索引擎-3 智能搜索,搜索“52Pojie.txt”。
00402AFBpush 52PoJie?005445D8%s\52Pojie.txt
选中地址00402AFB行,双击当前行,来到反汇编窗口。
00402AF5 |. 8DB7 BC000000 lea esi,dword ptr ds:
00402AFB |. 68 D8455400 push 52PoJie?005445D8 ; %s\52Pojie.txt //跳转到地址
00402B00 |. 56 push esi
找到程序段的段首,设置断点 。
00402A60 /. 55 push ebp //来到段首,设置断点
00402A61 |. 8BEC mov ebp,esp
00402A63 |. 6A FF push -0x1
地址00402AE8,KERNEL32.GetCurrent函数,获取被调试程序存放目录。
00402ADC |. 8D85 ECFEFFFF lea eax,
00402AE2 |. 50 push eax ; /Buffer = 00000040
00402AE3 |. 68 04010000 push 0x104 ; |BufSize = 104 (260.)
00402AE8 |. FF15 14345400 call dword ptr ds:[<&KERNEL32.GetCurrent>; \GetCurrentDirectoryA //获取被调试程序存放目录
00402AEE |. 8D85 ECFEFFFF lea eax, //显示目录
堆栈地址=0012F480, (ASCII "E:\")
eax=00000040
地址00402AFB,获取被调试程序存放目录下的52Pojie.txt文件。
00402AFB |. 68 D8455400 push 52PoJie?005445D8 ; %s\52Pojie.txt //获取%s\52Pojie.txt文件
00402B00 |. 56 push esi
00402B01 |. E8 8AE9FFFF call 52PoJie?00401490
来到关键跳,关键跳可能会计算注册码,单步步入查看。
00402C34 |. E8 77F4FFFF call 52PoJie?004020B0 //跳转条件,这个应该是算法存放地址
00402C39 |. 85C0 test eax,eax //跳转条件比较
00402C3B |. 74 11 je short 52PoJie?00402C4E //跳转
00402C3D |. 68 18465400 push 52PoJie?00544618 ; 验证通过 //验证通过提示
来到关键跳程序段的段首,单步运行。
00401FE0 |$ 55 push ebp
00401FE1 |. 8BEC mov ebp,esp
00401FE3 |. 81EC 10010000 sub esp,0x110
运行到地址00402006,KERNEL32.CreateFile函数,Mode = OPEN_EXISTING打开52Pojie.txt 文件。
00401FF5 |. 33F6 xor esi,esi
00401FF7 |. 56 push esi ; /hTemplateFile = NULL
00401FF8 |. 56 push esi ; |Attributes = 0
00401FF9 |. 6A 03 push 0x3 ; |Mode = OPEN_EXISTING
00401FFB |. 56 push esi ; |pSecurity = NULL
00401FFC |. 6A 01 push 0x1 ; |ShareMode = FILE_SHARE_READ
00401FFE |. 6A 01 push 0x1 ; |Access = 1
00402000 |. FFB1 BC000000 push dword ptr ds: ; |FileName = 00026AAE ???
00402006 |. FF15 10345400 call dword ptr ds:[<&KERNEL32.CreateFile>; \CreateFileA //获取%s\52Pojie.txt文件
0040200C |. 8BF8 mov edi,eax
运行到地址00402048,KERNEL32.ReadFile函数,读取52Pojie.txt 文件内字符串,在读取真注册码。
00402033 |. 8D85 F0FEFFFF lea eax,
00402039 |. 56 push esi ; /pOverlapped = NULL
0040203A |. 50 push eax ; |pBytesRead = 00000001
0040203B |. 68 04010000 push 0x104 ; |BytesToRead = 104 (260.)
00402040 |. 8D85 F4FEFFFF lea eax, ; |
00402046 |. 50 push eax ; |Buffer = 00000001
00402047 |. 57 push edi ; |hFile = 0000012C (window)
00402048 |. FF15 28345400 call dword ptr ds:[<&KERNEL32.ReadFile>] ; \ReadFile //读取%s\52Pojie.txt字符串
0040204E |. 85C0 test eax,eax
00402050 |. 74 3D je short 52PoJie?0040208F
00402052 |. B9 24465400 mov ecx,52PoJie?00544624 ; JXU2MjExJXU2 //真注册码
00402057 |. 8D85 F4FEFFFF lea eax,
0040205D |. 8D49 00 lea ecx,dword ptr ds:
00544624=52PoJie?00544624 (ASCII "JXU2MjExJXU2") //地址00402052信息
ecx=00544624 (52PoJie?00544624), ASCII "JXU2MjExJXU2"
比较了,看不明白,只好复制“JXU2MjExJXU2”注册码,测试通过。
00402060 |> /8A10 /mov dl,byte ptr ds: //真假注册码比较
00402062 |. |3A11 |cmp dl,byte ptr ds:
00402064 |. |75 1A |jnz short 52PoJie?00402080
00402066 |. |84D2 |test dl,dl
00402068 |. |74 12 |je short 52PoJie?0040207C
0040206A |. |8A50 01 |mov dl,byte ptr ds:
0040206D |. |3A51 01 |cmp dl,byte ptr ds:
00402070 |. |75 0E |jnz short 52PoJie?00402080
00402072 |. |83C0 02 |add eax,0x2
00402075 |. |83C1 02 |add ecx,0x2
00402078 |. |84D2 |test dl,dl
0040207A |.^\75 E4 \jnz short 52PoJie?00402060
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image024.jpg
安装新版的Adobe Flash Player就可以上传了~~
页:
[1]