00405E8C |. 52 push edx
00405E8D |. E8 58080100 call <jmp.&MFC42.#535>
00405E92 |. 8D4424 1C lea eax,dword ptr ss:[esp+0x1C]
00405E96 |. 8BCE mov ecx,esi
00405E98 |. 50 push eax
00405E99 |. E8 82000000 call BatchIma.00405F20
00405E9E |. 8B7424 14 mov esi,dword ptr ss:[esp+0x14] ; 爆破点: [esp+0x14]修改为[esp+0x18] 或jmp short 00405ED3 假码:(ASCII "1234567890abcdefghijk")
00405EA2 |. 8B4424 18 mov eax,dword ptr ss:[esp+0x18] ; 爆破点: [esp+0x18]修改为[esp+0x14] 或jmp short 00405ED3 真码: (ASCII "L5Y9KYRG7YCKF2U7") 在信息窗口出现真码
00405EA6 |> 8A10 /mov dl,byte ptr ds:[eax]
00405EA8 |. 8ACA |mov cl,dl
00405EAA |. 3A16 |cmp dl,byte ptr ds:[esi]
00405EAC |. 75 1C |jnz short BatchIma.00405ECA ; 这个循环是对比真假码的每一位,出现不等时就退出循环
00405EAE |. 3ACB |cmp cl,bl
00405EB0 |. 74 14 |je short BatchIma.00405EC6
00405EB2 |. 8A50 01 |mov dl,byte ptr ds:[eax+0x1]
00405EB5 |. 8ACA |mov cl,dl
00405EB7 |. 3A56 01 |cmp dl,byte ptr ds:[esi+0x1]
00405EBA |. 75 0E |jnz short BatchIma.00405ECA
00405EBC |. 83C0 02 |add eax,0x2
00405EBF |. 83C6 02 |add esi,0x2
00405EC2 |. 3ACB |cmp cl,bl
00405EC4 |.^ 75 E0 \jnz short BatchIma.00405EA6
00405EC6 |> 33C0 xor eax,eax
00405EC8 |. EB 05 jmp short BatchIma.00405ECF
00405ECA |> 1BC0 sbb eax,eax
00405ECC |. 83D8 FF sbb eax,-0x1
00405ECF |> 3BC3 cmp eax,ebx
00405ED1 |. 75 0C jnz short BatchIma.00405EDF ;爆破点:修改为 jnz 00405ED3
00405ED3 |. C785 C8000000>mov dword ptr ss:[ebp+0xC8],0x1 ;全部变量 ebp+0xC8
00405EDD |. EB 06 jmp short BatchIma.00405EE5
00405EDF |> 899D C8000000 mov dword ptr ss:[ebp+0xC8],ebx
00405EE5 |> 8D4C24 18 lea ecx,dword ptr ss:[esp+0x18]
注册码:L5Y9KYRG7YCKF2U7
----------------------------------------------------------------------------------------------------------------------------
【破解总结】:
1、字符串没加密,容易切入注册验证流程中;
2、注册信息明文保存,要改进;
3、注册码明文出现寄存器里,这点要改进应该加密;
4、真假两个注册码对比时,直接修改成真码跟真对比或假码跟假码对比,之前N大在有一课时也这样说了;
5、直接修改跳过真假对比跳到全局变理处,去验证代码!
----------------------------------------------------------------------------------------------------------------------------
【版权声明】:
本文原创于geekcat,转载请注明作者并保存文章的完整!