大牛都 在发驱动源码,而我连他们的源码都看不懂,
只会玩CrackMe,哪位好心的大牛收留我吧。
00401140 /[ DISCUZ_CODE_5 ]nbsp; 81EC C8000000 sub esp, 0C8
00401146 |. 57 push edi
00401147 |. B9 09000000 mov ecx, 9
0040114C |. 33C0 xor eax, eax
0040114E |. 8D7C24 2D lea edi, dword ptr [esp+2D]
00401152 |. C64424 2C 30 mov byte ptr [esp+2C], 30
00401157 |. 68 70804000 push 00408070 ; 请输入你的用户名啊:\n
0040115C |. F3:AB rep stos dword ptr es:[edi]
0040115E |. 66:AB stos word ptr es:[edi]
00401160 |. AA stos byte ptr es:[edi]
00401161 |. E8 01010000 call 00401267 ; puts
00401166 |. 8D4424 58 lea eax, dword ptr [esp+58] ; 存放用户名的地址
0040116A |. 50 push eax
0040116B |. 68 6C804000 push 0040806C ; %s
00401170 |. E8 DB000000 call 00401250 ; scanf
00401175 |. 68 54804000 push 00408054 ; 请输入你的注册码啊:\n
0040117A |. E8 E8000000 call 00401267 ; puts
0040117F |. 8D4C24 14 lea ecx, dword ptr [esp+14] ; 存放注册码的地址
00401183 |. 51 push ecx
00401184 |. 68 6C804000 push 0040806C ; %s
00401189 |. E8 C2000000 call 00401250 ; scanf
0040118E |. 8D9424 940000>lea edx, dword ptr [esp+94]
00401195 |. 8D4424 6C lea eax, dword ptr [esp+6C] ; 取用户名
00401199 |. 52 push edx
0040119A |. 50 push eax
0040119B |. E8 60FEFFFF call 00401000 ; 计算用户名长度并将用户名加密,加密其实就是把ascii换位
004011A0 |. 8D8C24 C40000>lea ecx, dword ptr [esp+C4]
004011A7 |. 8D9424 9C0000>lea edx, dword ptr [esp+9C] ; 加密后的用户名
004011AE |. 51 push ecx
004011AF |. 8D4424 78 lea eax, dword ptr [esp+78] ; 加密前的用户名
004011B3 |. 52 push edx
004011B4 |. 50 push eax
004011B5 |. E8 96FEFFFF call 00401050 ; 进行第二次加密
004011BA |. 8D4C24 58 lea ecx, dword ptr [esp+58]
004011BE |. 8D9424 D00000>lea edx, dword ptr [esp+D0] ; 第二次加密后的数据
004011C5 |. 51 push ecx
004011C6 |. 8D8424 AC0000>lea eax, dword ptr [esp+AC] ; 第一次加密后的数据
004011CD |. 52 push edx
004011CE |. 8D8C24 880000>lea ecx, dword ptr [esp+88] ; 原用户名
004011D5 |. 50 push eax
004011D6 |. 51 push ecx
004011D7 |. E8 A4FEFFFF call 00401080 ; 再一次进行处理
004011DC |. 8D7C24 40 lea edi, dword ptr [esp+40] ; 读取注册码
004011E0 |. 83C9 FF or ecx, FFFFFFFF
004011E3 |. 33C0 xor eax, eax
004011E5 |. 83C4 3C add esp, 3C
004011E8 |. F2:AE repne scas byte ptr es:[edi] ; 读取注册码到一个数组
004011EA |. F7D1 not ecx ; 其实就是计算注册码长度
004011EC |. 49 dec ecx
004011ED |. 5F pop edi
004011EE |. 85C9 test ecx, ecx
004011F0 |. 7E 0F jle short 00401201
004011F2 |> 8A5404 00 /mov dl, byte ptr [esp+eax] ; 依次读取注册码
004011F6 |. FEC2 |inc dl
004011F8 |. 885404 00 |mov byte ptr [esp+eax], dl ; 注册码ascii加 1
004011FC |. 40 |inc eax
004011FD |. 3BC1 |cmp eax, ecx
004011FF |.^ 7C F1 \jl short 004011F2
00401201 |> 8D5424 00 lea edx, dword ptr [esp]
00401205 |. 8D4424 28 lea eax, dword ptr [esp+28]
00401209 |. 52 push edx
0040120A |. 50 push eax
0040120B |. E8 F0FEFFFF call 00401100
00401210 |. 83C4 08 add esp, 8
00401213 |. 83F8 01 cmp eax, 1
00401216 |. 75 19 jnz short 00401231
00401218 |. 68 40804000 push 00408040 ; 你输入的是真码:
0040121D |. E8 45000000 call 00401267
00401222 |. 83C4 04 add esp, 4
00401225 |. E8 7C580000 call 00406AA6
0040122A |. 81C4 C8000000 add esp, 0C8
00401230 |. C3 retn
00401231 |> 68 30804000 push 00408030 ; 你要努力啊~:
00401236 |. E8 2C000000 call 00401267
0040123B |. 83C4 04 add esp, 4
0040123E |. E8 63580000 call 00406AA6
00401243 |. 81C4 C8000000 add esp, 0C8
00401249 \. C3 retn
00401000 /[ DISCUZ_CODE_19 ]nbsp; 53 push ebx
00401001 |. 57 push edi
00401002 |. 8B7C24 0C mov edi, dword ptr [esp+C] ; edi=用户名
00401006 |. 33DB xor ebx, ebx
00401008 |. 8A07 mov al, byte ptr [edi] ; 测试第一个字符是否为空
0040100A |. 84C0 test al, al
0040100C |. 74 3D je short 0040104B
0040100E |. 56 push esi
0040100F |. 8B7424 14 mov esi, dword ptr [esp+14] ; data
00401013 |> 0FBEC0 /movsx eax, al
00401016 |. 8BC8 |mov ecx, eax
00401018 |. 81E1 0F000080 |and ecx, 8000000F
0040101E |. 79 05 |jns short 00401025 ; 判断 是否为正数
00401020 |. 49 |dec ecx
00401021 |. 83C9 F0 |or ecx, FFFFFFF0
00401024 |. 41 |inc ecx
00401025 |> 99 |cdq
00401026 |. 83E2 0F |and edx, 0F ; 交换ascii的值,如56变65
00401029 |. 03C2 |add eax, edx
0040102B |. C0E1 04 |shl cl, 4 ; 左移4位
0040102E |. C1F8 04 |sar eax, 4 ; 右移4位
00401031 |. 02C8 |add cl, al ; 相加
00401033 |. 880E |mov byte ptr [esi], cl
00401035 |. 79 04 |jns short 0040103B ; 判断是否为正数
00401037 |. F6D9 |neg cl ; 不为正数则取反加1
00401039 |. 880E |mov byte ptr [esi], cl ; 存放起来
0040103B |> 8A47 01 |mov al, byte ptr [edi+1] ; 继续取下一位
0040103E |. 47 |inc edi
0040103F |. 46 |inc esi
00401050 /[ DISCUZ_CODE_20 ]nbsp; 57 push edi
00401051 |. 8B7C24 08 mov edi, dword ptr [esp+8] ; edi=用户名
00401055 |. 8A0F mov cl, byte ptr [edi] ; 取第一位判断是否为空
00401057 |. 84C9 test cl, cl
00401059 |. 74 20 je short 0040107B ; 若第一位为空则退出这个计算
0040105B |. 8B5424 10 mov edx, dword ptr [esp+10]
0040105F |. 56 push esi
00401060 |. 8B7424 10 mov esi, dword ptr [esp+10] ; 取加密后的用户名
00401064 |> 8A06 /mov al, byte ptr [esi]
00401066 |. 32C1 |xor al, cl ; 与加密前的用户名进行异或运算
00401068 |. 8802 |mov byte ptr [edx], al
0040106A |. 7F 04 |jg short 00401070 ; 判断是否小于等于0
0040106C |. 04 60 |add al, 60 ; 如果是,则加上0x60
0040106E |. 8802 |mov byte ptr [edx], al ; 取放得到 的数据
00401070 |> 8A4F 01 |mov cl, byte ptr [edi+1] ; 继续取下一位数据
00401073 |. 47 |inc edi
00401074 |. 46 |inc esi
00401075 |. 42 |inc edx
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!