Bluezzz 发表于 2020-4-6 11:06

闲来无事,看看这个CM呗

第一个CM好像有些失败,今天宅在家里,心血来潮,写个CM.各位大佬小佬都来看看吧,萌新第二次CM,勿喷勿喷...
这个CM有两点要求:
1.请勿使用IDA逆向(你想向我展示Hex-rays公司的实力?)
2.在OD里爆破不算(自己分析练习才能长本领)

注:密码是不会变的.
[附]成功截图:


CM在此:

zzhwaxy 发表于 2020-4-6 21:53


密码是个9位数字。
算法是按3位,3位,1位,2位分别拆出来比较。

zzhwaxy 发表于 2020-4-7 09:41

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对照着看。

柒汐 发表于 2020-4-6 14:04

这是干嘛?????

waiguazy 发表于 2020-4-6 11:27

这是干嘛?

huzpsb 发表于 2020-4-6 11:34

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(确信)

Bluezzz 发表于 2020-4-6 11:35

huzpsb 发表于 2020-4-6 11:34
v15 = v10 / 1000000;
if ( v10 / 1000000 == 159 )
{


啊啊啊啊啊啊,密码编辑(打码)一下,啊,你是不是用IDA了......

iTruth 发表于 2020-4-6 12:16

本帖最后由 iTruth 于 2020-4-6 14:10 编辑

Bluezzz 发表于 2020-4-6 11:35
啊啊啊啊啊啊,密码编辑(打码)一下,啊,你是不是用IDA了......
snowman是x64dbg上的插件,和IDA一样可以将汇编翻译成cpp代码。只不过效果没IDA好就是了
https://github.com/x64dbg/snowman

ZYZZMD 发表于 2020-4-6 13:15

厉害啦。

Bluezzz 发表于 2020-4-6 13:55

都过这么久了,还没人手动破解出来吗??? {:301_1009:} 大佬们都过节呢(恕我直言)???{:301_1001:}

Pammer 发表于 2020-4-6 14:21

本帖最后由 Pammer 于 2020-4-6 14:30 编辑

好吧,我承认我看了IDA。
不过楼主这办法挺巧妙的。

小菜鸟一枚 发表于 2020-4-6 18:45

不行了,这个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掉之后,即可爆破成功
页: [1] 2 3
查看完整版本: 闲来无事,看看这个CM呗