首页
社区
课程
招聘
问USER32.wsprintfA和KERNEL32.lstrcmp的功能
发表于: 2006-3-25 23:19 5423

问USER32.wsprintfA和KERNEL32.lstrcmp的功能

2006-3-25 23:19
5423
如标题

具体情况:
首先多谢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
请交大家
希望有人帮忙
不胜感激

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 270
活跃值: (176)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
2
到msdn去查吧
2006-3-26 08:10
0
游客
登录 | 注册 方可回帖
返回
//