如标题
具体情况:
首先多谢CCDebuger的OllyDBG 入门系列
看完后我就动手破解<<加密与解密(第二版)>>第4章的TraceMe
跟踪到了如下步骤
00401340 /$ 55 push ebp ; 保存现场
00401341 |. 8B6C24 0C mov ebp, [esp+C] ; ebp为用户名
00401345 |. 56 push esi
00401346 |. 57 push edi
00401347 |. 8B7C24 18 mov edi, [esp+18] ; edi为用户名长度
0040134B |. B9 03000000 mov ecx, 3 ; ecx控制循环
00401350 |. 33F6 xor esi, esi ; esi清0 esi用于保存运算结果
00401352 |. 33C0 xor eax, eax ; eax用于保存临时结果
00401354 |. 3BF9 cmp edi, ecx ; 将用户名长度与3比较
00401356 |. 7E 21 jle short 00401379 ; 用户名长度至少4位
00401358 |. 53 push ebx ; 用户名长度入栈
00401359 |> 83F8 07 /cmp eax, 7 ; 405030数组为8位,用于保证下面的ebx取值不要越界
0040135C |. 7E 02 |jle short 00401360
0040135E |. 33C0 |xor eax, eax ; 与前2句保证ebx不要越界
00401360 |> 33D2 |xor edx, edx ; edx置0
00401362 |. 33DB |xor ebx, ebx ; ebx置0
00401364 |. 8A1429 |mov dl, [ecx+ebp] ; 取用户名第ecx+1位
00401367 |. 8A98 30504000 |mov bl, [eax+405030] ; 405030的内容应该是数组12,10,19,9,12,11,10,8 ebx取数组第eax+1位
0040136D |. 0FAFD3 |imul edx, ebx ; edx为edx乘ebx的值
00401370 |. 03F2 |add esi, edx ; 将edx值加到esi,为最终密码
00401372 |. 41 |inc ecx ; ecx自增
00401373 |. 40 |inc eax ; eax自增
00401374 |. 3BCF |cmp ecx, edi ; ecx为4~用户名长度,密码长度应为(用户名长度-4)
00401376 |.^ 7C E1 \jl short 00401359 ; 小于用户名长度时则跳转
00401378 |. 5B pop ebx
00401379 |> 56 push esi ; /<%ld>
0040137A |. 68 78504000 push 00405078 ; |Format = "%ld"
0040137F |. 55 push ebp ; |s
00401380 |. FF15 9C404000 call [<&USER32.wsprintfA>; \wsprintfA
00401386 |. 8B4424 1C mov eax, [esp+1C]
0040138A |. 83C4 0C add esp, 0C
0040138D |. 55 push ebp ; /String2
0040138E |. 50 push eax ; |String1
0040138F |. FF15 04404000 call [<&KERNEL32.lstrcmp>; \lstrcmpA
00401395 |. F7D8 neg eax
00401397 |. 1BC0 sbb eax, eax
00401399 |. 5F pop edi
0040139A |. 5E pop esi
0040139B |. 40 inc eax
0040139C |. 5D pop ebp
0040139D \. C3 retn
已经很清楚遇到那2个函数前的计算了(如果分析又错,希望有达人指出)
但不知道那2个函数的用法
我输入用户名 badboy
计算到分析处esi为: 4601
但注册码是 4585
请交大家
希望有人帮忙
不胜感激
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)