- UID
- 1132
注册时间2005-4-20
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 无聊 2020-4-10 17:02 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
https://www.chinapyg.com/viewthr ... &extra=page%3D1
.text:00401010 var_14 = dword ptr -14h // 用於存儲真碼
.text:00401010 var_10 = dword ptr -10h // 用於存儲假碼
.text:00401010 var_C = dword ptr -0Ch // 用於存儲當前取的是用戶名的第幾位
.text:00401010 var_8 = dword ptr -8 // 用於存儲用戶名長度
.text:00401010 Buffer = dword ptr -4 // 用於存儲用戶名
.text:00401010
.text:00401010 push ebp ; 保留堆疊地址
.text:00401011 mov ebp, esp ; 保留堆疊地址
.text:00401013 sub esp, 54h ; 保留堆疊中的54h個字節空間
.text:00401016 push ebx ; 保存寄存器
.text:00401017 push esi ; 保存寄存器
.text:00401018 push edi ; 保存寄存器
.text:00401019 mov [ebp+var_10], 0 ; 初始化變數
.text:00401020 mov [ebp+var_14], 0 ; 初始化變數
.text:00401027 push offset aThisCrackmeIsM ; "This Crackme is made by pptppt\n"
.text:0040102C call _printf ; 輸出提示
.text:00401031 add esp, 4
.text:00401034 push offset aIFIUZ ; "请输入你的用户?
.text:00401039 call _printf ; 輸出提示
.text:0040103E add esp, 4
.text:00401041 mov eax, [ebp+Buffer] ; eax保存用戶名
.text:00401044 push eax ; Buffer
.text:00401045 call _gets
.text:0040104A add esp, 4
.text:0040104D mov ecx, [ebp+Buffer]
.text:00401050 push ecx ; Str
.text:00401051 call _strlen ; 計算用戶名長度
.text:00401056 add esp, 4
.text:00401059 mov [ebp+var_8], eax ; call _strlen返回值eax
.text:0040105C cmp [ebp+var_8], 5 ; 輸入的用戶名位數是否大於5
.text:00401060 jg short loc_401076 ; 判斷
.text:00401062 push offset aSGZ ; "提醒:用户?
.text:00401067 call _printf ; 小於等於五位就提示
.text:0040106C add esp, 4
.text:0040106F call sub_40DB10
.text:00401074 jmp short loc_4010EB ; 恢復寄存器
.text:00401076 ; ---------------------------------------------------------------------------
.text:00401076
.text:00401076 loc_401076: ; CODE XREF: _main_0+50j
.text:00401076 lea edx, [ebp+var_10] ; 保留了40個字節的空間用於存儲假碼
.text:00401079 push edx
.text:0040107A push offset Format ; "%d"
.text:0040107F call _scanf ; 輸入註冊碼
.text:00401084 add esp, 8
.text:00401087 mov [ebp+var_C], 0 ; 初始化變數為0
.text:0040108E jmp short loc_401099
.text:00401090 ; ---------------------------------------------------------------------------
.text:00401090
.text:00401090 loc_401090: ; CODE XREF: _main_0+B0j
.text:00401090 mov eax, [ebp+var_C]
.text:00401093 add eax, 1
.text:00401096 mov [ebp+var_C], eax
.text:00401099
.text:00401099 loc_401099: ; CODE XREF: _main_0+7Ej
.text:00401099 mov ecx, [ebp+var_C]
.text:0040109C cmp ecx, [ebp+var_8] ; 比較用戶名是否取完
.text:0040109F jge short loc_4010C2 ; 取完就跳
.text:004010A1 mov edx, [ebp+Buffer] ; 取用戶名
.text:004010A4 add edx, [ebp+var_C]
.text:004010A7 movsx eax, byte ptr [edx]
.text:004010AA mov ecx, [ebp+var_C] ; ecx保存變數
.text:004010AD add ecx, 1 ; 初始化是第一位
.text:004010B0 imul eax, ecx ; eax保存用戶名的第幾位,ecx保存為取的是第幾位用戶名
.text:004010B3 mov edx, [ebp+var_14] ; edx保存剛才的計算結果
.text:004010B6 lea eax, [edx+eax+100h] ; edx保存剛才的計算結果+eax保存上個迴圈的結算結果
+100h
.text:004010BD mov [ebp+var_14], eax ; 本次迴圈的結果保存在eax
.text:004010C0 jmp short loc_401090 ; 繼續迴圈下一次
.text:004010C2 ; ---------------------------------------------------------------------------
.text:004010C2
.text:004010C2 loc_4010C2: ; CODE XREF: _main_0+8Fj
.text:004010C2 mov ecx, [ebp+var_14] ; 將真碼送入ecx
.text:004010C5 cmp ecx, [ebp+var_10] ; ebp+var_10保存假碼,ecx保存真碼
.text:004010C8 jnz short loc_4010D9 ; 不相等就跳去提示註冊錯誤
.text:004010CA push offset aZVSJ ; "恭喜注册成功!\n"
.text:004010CF call _printf ; 輸出註冊成功
.text:004010D4 add esp, 4
.text:004010D7 jmp short loc_4010E6
.text:004010D9 ; ---------------------------------------------------------------------------
.text:004010D9
.text:004010D9 loc_4010D9: ; CODE XREF: _main_0+B8j
.text:004010D9 push offset aZ ; "抱歉兄弟加油!\n"
.text:004010DE call _printf ; 輸出註冊錯誤
.text:004010E3 add esp, 4
.text:004010E6
.text:004010E6 loc_4010E6: ; CODE XREF: _main_0+C7j
.text:004010E6 call sub_40DB10
.text:004010EB
.text:004010EB loc_4010EB: ; CODE XREF: _main_0+64j
.text:004010EB pop edi ; 恢復寄存器
.text:004010EC pop esi
.text:004010ED pop ebx
.text:004010EE mov esp, ebp
.text:004010F0 pop ebp
.text:004010F1 retn
都分析成這樣了,還原基本不難,不過我依然不懂編程,哪位教教???pm我啊 |
|