闲来无事,看看这个CM呗
第一个CM好像有些失败,今天宅在家里,心血来潮,写个CM.各位大佬小佬都来看看吧,萌新第二次CM,勿喷勿喷...这个CM有两点要求:
1.请勿使用IDA逆向(你想向我展示Hex-rays公司的实力?)
2.在OD里爆破不算(自己分析练习才能长本领)
注:密码是不会变的.
[附]成功截图:
CM在此:
密码是个9位数字。
算法是按3位,3位,1位,2位分别拆出来比较。
Bluezzz 发表于 2020-4-6 21:57
NB,这是真正的巨佬,硬核,教程可以补的详细一些吗?这样也可以供他人(包括我...)学习一下,分和币之 ...
00401602 E8 49520400 call 00446850 ; 得到输入转换为16进制
00401607 83EC 04 sub esp, 4 ; 这一段是除法优化过的指令
0040160A 8B4D BC mov ecx, dword ptr
0040160D BA 83DE1B43 mov edx, 431BDE83
00401612 89C8 mov eax, ecx
00401614 F7EA imul edx
00401616 C1FA 12 sar edx, 12
00401619 89C8 mov eax, ecx
0040161B C1F8 1F sar eax, 1F
0040161E 29C2 sub edx, eax
00401620 89D0 mov eax, edx
00401622 8945 D0 mov dword ptr , eax
00401625 817D D0 9F00000>cmp dword ptr , 9F ; serial /1000000 和 159 比较得到前三位
0040162C 75 4C jnz short 0040167A ; 失败则跳转
0040162E 8B45 BC mov eax, dword ptr ; 这一段是除法优化过的指令
00401631 2D C0257A09 sub eax, 97A25C0
00401636 8945 CC mov dword ptr , eax
00401639 8B4D CC mov ecx, dword ptr
0040163C BA D34D6210 mov edx, 10624DD3
00401641 89C8 mov eax, ecx
00401643 F7EA imul edx
00401645 C1FA 06 sar edx, 6
00401648 89C8 mov eax, ecx
0040164A C1F8 1F sar eax, 1F
0040164D 29C2 sub edx, eax
0040164F 89D0 mov eax, edx
00401651 8945 C8 mov dword ptr , eax
00401654 817D C8 6501000>cmp dword ptr , 165 ; (serial - 159000000 )/1000 和 357 比较得到后三位
0040165B 75 14 jnz short 00401671 ; 失败则跳转
0040165D C745 E4 DE00000>mov dword ptr , 0DE ; 成功条件赋值1
00401664 8B45 CC mov eax, dword ptr
00401667 2D 88720500 sub eax, 57288 ; 减去 357000 得到最右边三位
0040166C 8945 D8 mov dword ptr , eax
0040166F EB 10 jmp short 00401681
00401671 C745 E4 B0502C0>mov dword ptr , 12C50B0
00401678 EB 07 jmp short 00401681
0040167A C745 E4 7803000>mov dword ptr , 378 ; 这一段是除法优化过的指令
00401681 8B4D D8 mov ecx, dword ptr
00401684 BA 1F85EB51 mov edx, 51EB851F
00401689 89C8 mov eax, ecx
0040168B F7EA imul edx
0040168D C1FA 05 sar edx, 5
00401690 89C8 mov eax, ecx
00401692 C1F8 1F sar eax, 1F
00401695 29C2 sub edx, eax
00401697 89D0 mov eax, edx
00401699 8945 C4 mov dword ptr , eax
0040169C 837D C4 04 cmp dword ptr , 4 ; 判断百位是否为4
004016A0 75 09 jnz short 004016AB ; 失败则跳转
004016A2 C745 E0 2535130>mov dword ptr , 133525 ; 成功条件赋值2
004016A9 EB 07 jmp short 004016B2
004016AB C745 E0 46F2090>mov dword ptr , 9F246
004016B2 8B45 D8 mov eax, dword ptr
004016B5 2D 90010000 sub eax, 190 ; 减去 400 得到 最后两位
004016BA 8945 C0 mov dword ptr , eax
004016BD 837D C0 38 cmp dword ptr , 38 ; 判断最后两位是否为56
004016C1 75 09 jnz short 004016CC ; 失败则跳转
004016C3 C745 DC 9041020>mov dword ptr , 24190 ; 成功条件赋值3
004016CA EB 07 jmp short 004016D3
004016CC C745 DC 3885020>mov dword ptr , 28538
004016D3 817D E4 DE00000>cmp dword ptr , 0DE
004016DA 75 72 jnz short 0040174E ; 失败则跳转
004016DC 817D E0 2535130>cmp dword ptr , 133525
004016E3 75 69 jnz short 0040174E ; 失败则跳转
004016E5 817D DC 9041020>cmp dword ptr , 24190
004016EC 75 60 jnz short 0040174E ; 失败则跳转
004016EE C70424 F0FA4600 mov dword ptr , 0046FAF0
004016F5 C745 88 0100000>mov dword ptr , 1
004016FC B9 60DF4700 mov ecx, 0047DF60
00401701 E8 0A7A0400 call 00449110
00401706 83EC 04 sub esp, 4
00401709 C74424 04 3CF04>mov dword ptr , 0047F03C ; ASCII ">>>>>>>>>> Ok,you win! <<<<<<<<<<"
通过最后三个判断找出前面正确赋值的地方。
除法优化指令不容易看出来,建议和IDA对照着看。 这是干嘛????? 这是干嘛? v15 = v10 / 1000000;
if ( v10 / 1000000 == 159 )
{
v14 = v10 - 159000000;
v13 = (v10 - 159000000) / 1000;
if ( v13 == 357 )
{
v20 = 222;
v17 = v14 - 357000;
}
else
{
v20 = 19681456;
}
}
else
{
v20 = 888;
}
v12 = v17 / 100;
if ( v17 / 100 == 4 )
v19 = 1258789;
else
v19 = 651846;
v11 = v17 - 400;
if ( v17 == 456 )
v18 = 147856;
else
v18 = 165176;
if ( v20 != 222 || v19 != 1258789 || v18 != 147856 )
{
我爱snowman(确信) huzpsb 发表于 2020-4-6 11:34
v15 = v10 / 1000000;
if ( v10 / 1000000 == 159 )
{
啊啊啊啊啊啊,密码编辑(打码)一下,啊,你是不是用IDA了...... 本帖最后由 iTruth 于 2020-4-6 14:10 编辑
Bluezzz 发表于 2020-4-6 11:35
啊啊啊啊啊啊,密码编辑(打码)一下,啊,你是不是用IDA了......
snowman是x64dbg上的插件,和IDA一样可以将汇编翻译成cpp代码。只不过效果没IDA好就是了
https://github.com/x64dbg/snowman
厉害啦。 都过这么久了,还没人手动破解出来吗??? {:301_1009:} 大佬们都过节呢(恕我直言)???{:301_1001:} 本帖最后由 Pammer 于 2020-4-6 14:30 编辑
好吧,我承认我看了IDA。
不过楼主这办法挺巧妙的。
不行了,这个upx壳我脱不掉,只能直接运行起来,搜索字符串
004016D3 817D E4 DE00000>cmp dword ptr ss:,0xDE
004016DA 90 nop
004016DB 90 nop
004016DC 817D E0 2535130>cmp dword ptr ss:,0x133525
004016E3 90 nop
004016E4 90 nop
004016E5 817D DC 9041020>cmp dword ptr ss:,0x24190
004016EC 90 nop
004016ED 90 nop
004016EE C70424 F0FA4600 mov dword ptr ss:,CrackMe.0046FAF0
004016F5 C745 88 0100000>mov dword ptr ss:,0x1
004016FC B9 60DF4700 mov ecx,CrackMe.0047DF60 ; ,SH
00401701 E8 0A7A0400 call CrackMe.00449110
00401706 83EC 04 sub esp,0x4
00401709 C74424 04 3CF04>mov dword ptr ss:,CrackMe.0047F>; >>>>>>>>>> Ok,you win! <<<<<<<<<<
我将上面三个jnz nop掉之后,即可爆破成功