吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16108|回复: 34
收起左侧

[原创] Reversing cutie-keygen

  [复制链接]
Sound 发表于 2017-5-22 07:22
本帖最后由 Sound 于 2017-5-22 07:32 编辑

0x0  大早晨的咯,还是比较困的,思绪有点乱,凑合看吧。
0x1  Crack Me 当然都是没有壳啦,没有VM啦,然后最适合我这菜鸡啦,毕竟真正的CrackMe玩的都是套路,唔,有点碎碎念了。

1.png
QT的Crack Me,试运行
2.png
界面标题 有个cutie keygen,找Main,懒得拖IDA

0x2 Main位于01381BF0,PS:自行注意偏移地址
[Asm] 纯文本查看 复制代码
0138190B  |.  6A 0C                                       PUSH    0xC0138190D  |.  68 18B0C401                                 PUSH    01C4B018                                                ;  cutie keygen
01381912  |.  FFD5                                        CALL    EBP
01381914  |.  83C4 08                                     ADD     ESP, 0x8
01381917  |.  894424 10                                   MOV     DWORD PTR SS:[ESP+0x10], EAX
0138191B  |.  8D4424 10                                   LEA     EAX, DWORD PTR SS:[ESP+0x10]
0138191F  |.  C64424 68 07                                MOV     BYTE PTR SS:[ESP+0x68], 0x7
01381924  |.  50                                          PUSH    EAX
01381925  |.  8D4C24 1C                                   LEA     ECX, DWORD PTR SS:[ESP+0x1C]
01381929  |.  FF15 A0413801                               CALL    DWORD PTR DS:[<&Qt5Gui.QWindow::setTitle>]              ;  Qt5Gui.QWindow::setTitle
0138192F  |.  8D4C24 10                                   LEA     ECX, DWORD PTR SS:[ESP+0x10]
01381933  |.  C64424 68 04                                MOV     BYTE PTR SS:[ESP+0x68], 0x4
01381938  |.  FF15 84413801                               CALL    DWORD PTR DS:[<&Qt5Core.QString::~QString>]             ;  Qt5Core.QXmlStreamStringRef::~QXmlStreamStringRef
0138193E  |.  8D4C24 18                                   LEA     ECX, DWORD PTR SS:[ESP+0x18]
01381942  |.  FF15 BC413801                               CALL    DWORD PTR DS:[<&Qt5Gui.QWindow::show>]                  ;  Qt5Gui.QWindow::show
01381948  |.  6A 00                                       PUSH    0x0
0138194A  |.  8D4C24 38                                   LEA     ECX, DWORD PTR SS:[ESP+0x38]
0138194E  |.  E8 9D020000                                 CALL    01381BF0


0x3 找按钮派发事件
[Asm] 纯文本查看 复制代码
01382E80  /$  8B4424 08                                   MOV     EAX, DWORD PTR SS:[ESP+0x8]
01382E84  |.  83EC 08                                     SUB     ESP, 0x8
01382E87  |.  85C0                                        TEST    EAX, EAX
01382E89  |.  75 61                                       JNZ     SHORT 01382EEC
01382E8B  |.  8B4424 14                                   MOV     EAX, DWORD PTR SS:[ESP+0x14]
01382E8F  |.  83E8 00                                     SUB     EAX, 0x0                                                ;  Switch (cases 0..1)
01382E92  |.  74 20                                       JE      SHORT 01382EB4
01382E94  |.  48                                          DEC     EAX
01382E95  |.  75 71                                       JNZ     SHORT 01382F08
01382E97  |.  8B4424 18                                   MOV     EAX, DWORD PTR SS:[ESP+0x18]                            ;  Case 1 of switch 01382E8F
01382E9B  |.  51                                          PUSH    ECX
01382E9C  |.  8BCC                                        MOV     ECX, ESP
01382E9E  |.  FF70 04                                     PUSH    DWORD PTR DS:[EAX+0x4]
01382EA1  |.  FF15 40413801                               CALL    DWORD PTR DS:[<&Qt5Core.QString::QString>]              ;  Qt5Core.QString::QString
01382EA7  |.  8B4C24 10                                   MOV     ECX, DWORD PTR SS:[ESP+0x10]                            ; |
01382EAB  |.  E8 E0F5FFFF                                 CALL    01382490                                                ; \win-crac.01382490
01382EB0  |.  83C4 08                                     ADD     ESP, 0x8
01382EB3  |.  C3                                          RETN


跟进来
[Asm] 纯文本查看 复制代码
01382EAB  |.  E8 E0F5FFFF                                 CALL    01382490                                                ; \win-crac.01382490

这里是字符串消息记录调试
[Asm] 纯文本查看 复制代码
013825AA  |.  E8 A1F7FFFF                                 CALL    01381D50                                                ; \win-crac.01381D50013825AF  |.  84C0                                        TEST    AL, AL
013825B1  |.  8D4C24 38                                   LEA     ECX, DWORD PTR SS:[ESP+0x38]
013825B5  |.  8D4424 18                                   LEA     EAX, DWORD PTR SS:[ESP+0x18]
013825B9  |.  50                                          PUSH    EAX
013825BA  |.  6A 00                                       PUSH    0x0
013825BC  |.  6A 00                                       PUSH    0x0
013825BE  |.  6A 00                                       PUSH    0x0
013825C0      74 2B                                       JE      SHORT 013825ED
013825C2  |.  FF15 54413801                               CALL    DWORD PTR DS:[<&Qt5Core.QMessageLogger::QMessageLogger>>;  Qt5Core.QMessageLogger::QMessageLogger
013825C8  |.  8BC8                                        MOV     ECX, EAX
013825CA  |.  FFD5                                        CALL    EBP
013825CC  |.  68 B4B0C401                                 PUSH    01C4B0B4                                                ;  YES!
013825D1  |.  8BC8                                        MOV     ECX, EAX
013825D3  |.  C64424 58 03                                MOV     BYTE PTR SS:[ESP+0x58], 0x3
013825D8  |.  FF15 1C413801                               CALL    DWORD PTR DS:[<&Qt5Core.QDebug::operator<<>]            ;  Qt5Core.QDebug::operator<<
013825DE  |.  8D4C24 18                                   LEA     ECX, DWORD PTR SS:[ESP+0x18]
013825E2  |.  C64424 54 01                                MOV     BYTE PTR SS:[ESP+0x54], 0x1
013825E7  |.  FFD7                                        CALL    EDI
013825E9  |.  6A 00                                       PUSH    0x0
013825EB  |.  EB 29                                       JMP     SHORT 01382616
013825ED  |>  FF15 54413801                               CALL    DWORD PTR DS:[<&Qt5Core.QMessageLogger::QMessageLogger>>;  Qt5Core.QMessageLogger::QMessageLogger
013825F3  |.  8BC8                                        MOV     ECX, EAX
013825F5  |.  FFD5                                        CALL    EBP
013825F7  |.  68 BCB0C401                                 PUSH    01C4B0BC                                                ;  NOPE :(

爆破的话 013825C0
0x4 PassWord
[Asm] 纯文本查看 复制代码
013825AA  |.  E8 A1F7FFFF                                 CALL    01381D50                                                ; \win-crac.01381D50



[Asm] 纯文本查看 复制代码
01381DB3  |.  FF15 40413801                               CALL    DWORD PTR DS:[<&Qt5Core.QString::QString>]              ;  Qt5Core.QString::QString
01381DB9  |.  8BCB                                        MOV     ECX, EBX                                                ; |
01381DBB  |.  E8 E0000000                                 CALL    01381EA0                                                ; \win-crac.01381EA0
01381DC0  |.  50                                          PUSH    EAX
01381DC1  |.  8D8C24 2C010000                             LEA     ECX, DWORD PTR SS:[ESP+0x12C]
01381DC8  |.  FF15 3C413801                               CALL    DWORD PTR DS:[<&Qt5Core.QString::operator=>]            ;  Qt5Core.QString::operator=
01381DCE  |.  51                                          PUSH    ECX
01381DCF  |.  8D8424 2C010000                             LEA     EAX, DWORD PTR SS:[ESP+0x12C]
01381DD6  |.  8BCC                                        MOV     ECX, ESP
01381DD8  |.  50                                          PUSH    EAX
01381DD9  |.  FF15 40413801                               CALL    DWORD PTR DS:[<&Qt5Core.QString::QString>]              ;  Qt5Core.QString::QString
01381DDF  |.  8BCB                                        MOV     ECX, EBX
01381DE1  |.  E8 7A080000                                 CALL    01382660


01381DB3  PassWord
01381DE1 |. E8 7A080000 CALL 01382660 xor PassWord
0x5 初始化算法
跟进Main
CALL 01381BF0
01381C32  |.  E8 69030000                                 CALL    01381FA0  算法

加密的关键,块加密算法,
初始化的数据
[Asm] 纯文本查看 复制代码
0138221B  |.  C78424 90000000 DF90BC70                    MOV     DWORD PTR SS:[ESP+0x90], 0x70BC90DF
01382226  |.  C78424 94000000 57EF965A                    MOV     DWORD PTR SS:[ESP+0x94], 0x5A96EF57
01382231  |.  C78424 98000000 EECF0955                    MOV     DWORD PTR SS:[ESP+0x98], 0x5509CFEE
0138223C  |.  C78424 9C000000 CE80200D                    MOV     DWORD PTR SS:[ESP+0x9C], 0xD2080CE
01382247  |.  C78424 A0000000 4FE10E07                    MOV     DWORD PTR SS:[ESP+0xA0], 0x70EE14F
01382252  |.  C78424 A4000000 46A4C62F                    MOV     DWORD PTR SS:[ESP+0xA4], 0x2FC6A446
0138225D  |.  C78424 A8000000 F0EC5553                    MOV     DWORD PTR SS:[ESP+0xA8], 0x5355ECF0
01382268  |.  C78424 AC000000 2B785764                    MOV     DWORD PTR SS:[ESP+0xAC], 0x6457782B


用了一对64的块,并且每个都使用了个64的密钥并且看关键的地方是不是一个字符或单个数据块,然后这些数值在初始化的时候就被利用 。
[Asm] 纯文本查看 复制代码
013822B8  |.  C747 18 3A0E0F88                            MOV     DWORD PTR DS:[EDI+0x18], 0x880F0E3A
013822BF  |.  C747 1C AF56D816                            MOV     DWORD PTR DS:[EDI+0x1C], 0x16D856AF
013822C6  |.  C747 20 10F38F05                            MOV     DWORD PTR DS:[EDI+0x20], 0x58FF310
013822CD  |.  C747 24 7C36E8D8                            MOV     DWORD PTR DS:[EDI+0x24], 0xD8E8367C


再看这里01381DE1 |. E8 7A080000 CALL 01382660 xor PassWord

这里是16个字节的第一块地方,然后同一段代码来处理最后16个字节,其次逆变换在最小尾数
[Asm] 纯文本查看 复制代码
013829C0   > /33C0                                        XOR     EAX, EAX
013829C2   . |8BCA                                        MOV     ECX, EDX
013829C4   . |0FACEA 08                                   SHRD    EDX, EBP, 0x8
013829C8   . |C1E1 18                                     SHL     ECX, 0x18
013829CB   . |C1ED 08                                     SHR     EBP, 0x8
013829CE   . |0BD0                                        OR      EDX, EAX
013829D0   . |0BE9                                        OR      EBP, ECX
013829D2   . |03D3                                        ADD     EDX, EBX
013829D4   . |8BCE                                        MOV     ECX, ESI
013829D6   . |13EE                                        ADC     EBP, ESI
013829D8   . |C1E9 1D                                     SHR     ECX, 0x1D
013829DB   . |336C24 58                                   XOR     EBP, DWORD PTR SS:[ESP+0x58]
013829DF   . |33D7                                        XOR     EDX, EDI
013829E1   . |0FA4DE 03                                   SHLD    ESI, EBX, 0x3
013829E5   . |896C24 3C                                   MOV     DWORD PTR SS:[ESP+0x3C], EBP
013829E9   . |0BF0                                        OR      ESI, EAX
013829EB   . |896C24 7C                                   MOV     DWORD PTR SS:[ESP+0x7C], EBP
013829EF   . |33F5                                        XOR     ESI, EBP
013829F1   . |C1E3 03                                     SHL     EBX, 0x3
013829F4   . |8B6C24 5C                                   MOV     EBP, DWORD PTR SS:[ESP+0x5C]
013829F8   . |0BD9                                        OR      EBX, ECX
013829FA   . |8B4C24 1C                                   MOV     ECX, DWORD PTR SS:[ESP+0x1C]
013829FE   . |33DA                                        XOR     EBX, EDX
01382A00   . |0FAC6C24 1C 08                              SHRD    DWORD PTR SS:[ESP+0x1C], EBP, 0x8
01382A06   . |0B4424 1C                                   OR      EAX, DWORD PTR SS:[ESP+0x1C]
01382A0A   . |C1E1 18                                     SHL     ECX, 0x18
01382A0D   . |C1ED 08                                     SHR     EBP, 0x8
01382A10   . |0BCD                                        OR      ECX, EBP
01382A12   . |895424 78                                   MOV     DWORD PTR SS:[ESP+0x78], EDX
01382A16   . |8B6C24 58                                   MOV     EBP, DWORD PTR SS:[ESP+0x58]
01382A1A   . |03C7                                        ADD     EAX, EDI
01382A1C   . |897424 74                                   MOV     DWORD PTR SS:[ESP+0x74], ESI
01382A20   . |13CD                                        ADC     ECX, EBP
01382A22   . |334424 24                                   XOR     EAX, DWORD PTR SS:[ESP+0x24]
01382A26   . |334C24 14                                   XOR     ECX, DWORD PTR SS:[ESP+0x14]
01382A2A   . |894424 1C                                   MOV     DWORD PTR SS:[ESP+0x1C], EAX
01382A2E   . |33C0                                        XOR     EAX, EAX
01382A30   . |894C24 5C                                   MOV     DWORD PTR SS:[ESP+0x5C], ECX
01382A34   . |8BCD                                        MOV     ECX, EBP
01382A36   . |0FA4FD 03                                   SHLD    EBP, EDI, 0x3
01382A3A   . |C1E9 1D                                     SHR     ECX, 0x1D
01382A3D   . |0BC5                                        OR      EAX, EBP
01382A3F   . |C1E7 03                                     SHL     EDI, 0x3
01382A42   . |334424 5C                                   XOR     EAX, DWORD PTR SS:[ESP+0x5C]
01382A46   . |0BF9                                        OR      EDI, ECX
01382A48   . |337C24 1C                                   XOR     EDI, DWORD PTR SS:[ESP+0x1C]
01382A4C   . |8B6C24 3C                                   MOV     EBP, DWORD PTR SS:[ESP+0x3C]
01382A50   . |894424 58                                   MOV     DWORD PTR SS:[ESP+0x58], EAX
01382A54   . |8B4424 24                                   MOV     EAX, DWORD PTR SS:[ESP+0x24]
01382A58   . |83C0 01                                     ADD     EAX, 0x1
01382A5B   . |894424 24                                   MOV     DWORD PTR SS:[ESP+0x24], EAX
01382A5F   . |835424 14 00                                ADC     DWORD PTR SS:[ESP+0x14], 0x0
01382A64   . |75 09                                       JNZ     SHORT 01382A6F
01382A66   . |83F8 20                                     CMP     EAX, 0x20
01382A69   .^\0F82 51FFFFFF                               JB      013829C0


013829D0   .  0BE9                                        OR      EBP, ECX                                                ;  s0 = ror(s0, 8)
013829D6   .  13EE                                        ADC     EBP, ESI                                                ;  s0 = s0 + s1
013829DF   .  33D7                                        XOR     EDX, EDI                                                ;  s0 = s0 ^ x0
013829F8   .  0BD9                                        OR      EBX, ECX                                                ; s1 = rol(s1, 3)
013829FE   .  33DA                                        XOR     EBX, EDX                                                ;  s1 = s1 ^ s0
01382A10   .  0BCD                                        OR      ECX, EBP                                                ;  x1 = ror(x1, 8)
01382A20   .  13CD                                        ADC     ECX, EBP                                                ;  x1 = x1 + x0
01382A26   .  334C24 14                                XOR     ECX, DWORD PTR SS:[ESP+0x14]                            ;  x1 = x1 ^ i
01382A46   .  0BF9                                        OR      EDI, ECX                                                ;  x0 = rol(x0, 3)
01382A48   .  337C24 1C                                   XOR     EDI, DWORD PTR SS:[ESP+0x1C]                            ;  x0 = x0 ^ x1
01382A5F   .  835424 14 00                                ADC     DWORD PTR SS:[ESP+0x14], 0x0                            ;  i = i + 1

C747 18 3A0E0F88                            MOV     DWORD PTR DS:[EDI+0x18], 0x880F0E3A
013822BF  |.  C747 1C AF56D816                            MOV     DWORD PTR DS:[EDI+0x1C], 0x16D856AF
013822C6  |.  C747 20 10F38F05                            MOV     DWORD PTR DS:[EDI+0x20], 0x58FF310
013822CD  |.  C747 24 7C36E8D8                            MOV     DWORD PTR DS:[EDI+0x24], 0xD8E8367C


Python
[Python] 纯文本查看 复制代码
def en_cry(HexData):
    s0, s1 = HexData
    x0 = 0xD8E8367C058FF310
    x1 = 0x16D856AF880F0E3A
    for i in xrange(32):
        s0 = add(ror(s0, 8), s1) ^ x0
        x1 = add(ror(x1, 8), x0) ^ i
        s1 = rol(s1, 3) ^ s0
        x0 = rol(x0, 3) ^ x1
    return s0, s1

def encrypt(HexData):
    res = []
    for i in xrange(0, len(HexData), 2):
        res.extend(en_cry(HexData[i:i + 2]))
    return res

def encrypt_passwd(passwd):
    l = unpack('>4Q', pack('>16H', *passwd))
    l = encrypt(l)
    l = unpack('>16H', pack('>4Q', *l))    return l


0x6 加密密钥与阵列块

[Asm] 纯文本查看 复制代码
01381E11  |> \FF73 08                                     PUSH    DWORD PTR DS:[EBX+0x8]
01381E14  |.  8D4424 18                                   LEA     EAX, DWORD PTR SS:[ESP+0x18]
01381E18  |.  50                                          PUSH    EAX
01381E19  |.  8D8424 9C000000                             LEA     EAX, DWORD PTR SS:[ESP+0x9C]
01381E20  |.  50                                          PUSH    EAX
01381E21  |.  E8 0AFCFFFF                                 CALL    01381A30
01381E26  |.  8BF0                                        MOV     ESI, EAX
01381E28  |.  B9 20000000                                 MOV     ECX, 0x20
01381E2D  |.  F3:A5                                       REP     MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI]
01381E2F  |.  83C4 0C                                     ADD     ESP, 0xC
01381E32  |.  8D7C24 14                                   LEA     EDI, DWORD PTR SS:[ESP+0x14]
01381E36  |.  8BF0                                        MOV     ESI, EAX
01381E38  |.  B9 20000000                                 MOV     ECX, 0x20
01381E3D  |.  F3:A5                                       REP     MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI]
01381E3F  |.  FF73 0C                                     PUSH    DWORD PTR DS:[EBX+0xC]
01381E42  |.  8D4C24 18                                   LEA     ECX, DWORD PTR SS:[ESP+0x18]
01381E46  |.  E8 05FEFFFF                                 CALL    01381C50
01381E4B  |.  84C0                                        TEST    AL, AL
01381E4D  |.  75 04                                       JNZ     SHORT 01381E53
01381E4F  |.  B3 01                                       MOV     BL, 0x1
01381E51  |.  EB 02                                       JMP     SHORT 01381E55
01381E53  |>  32DB                                        XOR     BL, BL
01381E55  |>  8D8C24 28010000                             LEA     ECX, DWORD PTR SS:[ESP+0x128]
01381E5C  |.  C78424 20010000 FFFFFFFF                    MOV     DWORD PTR SS:[ESP+0x120], -0x1
01381E67  |.  FF15 84413801                               CALL    DWORD PTR DS:[<&Qt5Core.QString::~QString>]             ;  Qt5Core.QXmlStreamStringRef::~QXmlStreamStringRef


这里基于密钥与阵列,然后创造我们的Key与基准数据进行比较。
[Asm] 纯文本查看 复制代码
01381FBE  |.  C74424 10 80130000                          MOV     DWORD PTR SS:[ESP+0x10], 0x1380
01381FC6  |.  C74424 14 00000000                          MOV     DWORD PTR SS:[ESP+0x14], 0x0
01381FCE  |.  C74424 18 E4040000                          MOV     DWORD PTR SS:[ESP+0x18], 0x4E4
01381FD6  |.  C74424 1C 00000000                          MOV     DWORD PTR SS:[ESP+0x1C], 0x0
01381FDE  |.  C74424 20 09270000                          MOV     DWORD PTR SS:[ESP+0x20], 0x2709
01381FE6  |.  C74424 24 00000000                          MOV     DWORD PTR SS:[ESP+0x24], 0x0
01381FEE  |.  C74424 28 35200000                          MOV     DWORD PTR SS:[ESP+0x28], 0x2035
01381FF6  |.  C74424 2C 00000000                          MOV     DWORD PTR SS:[ESP+0x2C], 0x0
01381FFE  |.  C74424 30 FA250000                          MOV     DWORD PTR SS:[ESP+0x30], 0x25FA
01382006  |.  C74424 34 00000000                          MOV     DWORD PTR SS:[ESP+0x34], 0x0
0138200E  |.  C74424 38 DA560000                          MOV     DWORD PTR SS:[ESP+0x38], 0x56DA
01382016  |.  C74424 3C 00000000                          MOV     DWORD PTR SS:[ESP+0x3C], 0x0
0138201E  |.  C74424 40 03010000                          MOV     DWORD PTR SS:[ESP+0x40], 0x103
01382026  |.  C74424 44 00000000                          MOV     DWORD PTR SS:[ESP+0x44], 0x0
0138202E  |.  C74424 48 31150000                          MOV     DWORD PTR SS:[ESP+0x48], 0x1531
01382036  |.  C74424 4C 00000000                          MOV     DWORD PTR SS:[ESP+0x4C], 0x0
0138203E  |.  C74424 50 AA0C0000                          MOV     DWORD PTR SS:[ESP+0x50], 0xCAA
01382046  |.  C74424 54 00000000                          MOV     DWORD PTR SS:[ESP+0x54], 0x0
0138204E  |.  C74424 58 611A0000                          MOV     DWORD PTR SS:[ESP+0x58], 0x1A61
01382056  |.  C74424 5C 00000000                          MOV     DWORD PTR SS:[ESP+0x5C], 0x0
0138205E  |.  C74424 60 070E0000                          MOV     DWORD PTR SS:[ESP+0x60], 0xE07
01382066  |.  C74424 64 00000000                          MOV     DWORD PTR SS:[ESP+0x64], 0x0
0138206E  |.  C74424 68 20000000                          MOV     DWORD PTR SS:[ESP+0x68], 0x20
01382076  |.  C74424 6C 00000000                          MOV     DWORD PTR SS:[ESP+0x6C], 0x0
0138207E  |.  C74424 70 E2000000                          MOV     DWORD PTR SS:[ESP+0x70], 0xE2
01382086  |.  C74424 74 00000000                          MOV     DWORD PTR SS:[ESP+0x74], 0x0
0138208E  |.  C74424 78 3F120000                          MOV     DWORD PTR SS:[ESP+0x78], 0x123F
01382096  |.  C74424 7C 00000000                          MOV     DWORD PTR SS:[ESP+0x7C], 0x0
0138209E  |.  C78424 80000000 C0000000                    MOV     DWORD PTR SS:[ESP+0x80], 0xC0
013820A9  |.  C78424 84000000 00000000                    MOV     DWORD PTR SS:[ESP+0x84], 0x0
013820B4  |.  C78424 88000000 C70D0000                    MOV     DWORD PTR SS:[ESP+0x88], 0xDC7
013820BF  |.  C78424 8C000000 00000000                    MOV     DWORD PTR SS:[ESP+0x8C], 0x0



这里有16个数据块的阵列,我们可以先表示位为4×4的矩阵,它在开始时就被初始化,以及另一个常数数据矩阵相乘。
如果是相等的,输入的Key就是有效的。
[Asm] 纯文本查看 复制代码
013820EE  |.  C74424 10 6AC26F14                          MOV     DWORD PTR SS:[ESP+0x10], 0x146FC26A
013820F6  |.  C74424 14 00000000                          MOV     DWORD PTR SS:[ESP+0x14], 0x0
013820FE  |.  C74424 18 9A013424                          MOV     DWORD PTR SS:[ESP+0x18], 0x2434019A
01382106  |.  C74424 1C 00000000                          MOV     DWORD PTR SS:[ESP+0x1C], 0x0
0138210E  |.  C74424 20 4E96B216                          MOV     DWORD PTR SS:[ESP+0x20], 0x16B2964E
01382116  |.  C74424 24 00000000                          MOV     DWORD PTR SS:[ESP+0x24], 0x0
0138211E  |.  C74424 28 64C1FC1D                          MOV     DWORD PTR SS:[ESP+0x28], 0x1DFCC164
01382126  |.  C74424 2C 00000000                          MOV     DWORD PTR SS:[ESP+0x2C], 0x0
0138212E  |.  C74424 30 046B7610                          MOV     DWORD PTR SS:[ESP+0x30], 0x10766B04
01382136  |.  C74424 34 00000000                          MOV     DWORD PTR SS:[ESP+0x34], 0x0
0138213E  |.  C74424 38 9DE9671F                          MOV     DWORD PTR SS:[ESP+0x38], 0x1F67E99D
01382146  |.  C74424 3C 00000000                          MOV     DWORD PTR SS:[ESP+0x3C], 0x0
0138214E  |.  C74424 40 02589013                          MOV     DWORD PTR SS:[ESP+0x40], 0x13905802
01382156  |.  C74424 44 00000000                          MOV     DWORD PTR SS:[ESP+0x44], 0x0
0138215E  |.  C74424 48 A39DA914                          MOV     DWORD PTR SS:[ESP+0x48], 0x14A99DA3
01382166  |.  C74424 4C 00000000                          MOV     DWORD PTR SS:[ESP+0x4C], 0x0
0138216E  |.  C74424 50 6CCEE52A                          MOV     DWORD PTR SS:[ESP+0x50], 0x2AE5CE6C
01382176  |.  C74424 54 00000000                          MOV     DWORD PTR SS:[ESP+0x54], 0x0
0138217E  |.  C74424 58 7FAA4840                          MOV     DWORD PTR SS:[ESP+0x58], 0x4048AA7F
01382186  |.  C74424 5C 00000000                          MOV     DWORD PTR SS:[ESP+0x5C], 0x0
0138218E  |.  C74424 60 5F9BCF33                          MOV     DWORD PTR SS:[ESP+0x60], 0x33CF9B5F
01382196  |.  C74424 64 00000000                          MOV     DWORD PTR SS:[ESP+0x64], 0x0
0138219E  |.  C74424 68 6216102C                          MOV     DWORD PTR SS:[ESP+0x68], 0x2C101662
013821A6  |.  C74424 6C 00000000                          MOV     DWORD PTR SS:[ESP+0x6C], 0x0
013821AE  |.  C74424 70 E4FCF52D                          MOV     DWORD PTR SS:[ESP+0x70], 0x2DF5FCE4
013821B6  |.  C74424 74 00000000                          MOV     DWORD PTR SS:[ESP+0x74], 0x0
013821BE  |.  C74424 78 4CC7264C                          MOV     DWORD PTR SS:[ESP+0x78], 0x4C26C74C
013821C6  |.  C74424 7C 00000000                          MOV     DWORD PTR SS:[ESP+0x7C], 0x0
013821CE  |.  C78424 80000000 0F98D52C                    MOV     DWORD PTR SS:[ESP+0x80], 0x2CD5980F
013821D9  |.  C78424 84000000 00000000                    MOV     DWORD PTR SS:[ESP+0x84], 0x0
013821E4  |.  C78424 88000000 DBDEA92B                    MOV     DWORD PTR SS:[ESP+0x88], 0x2BA9DEDB
013821EF  |.  C78424 8C000000 00000000                    MOV     DWORD PTR SS:[ESP+0x8C], 0x0


Python
[Python] 纯文本查看 复制代码
def Fuck():
    B = []
    for i in xrange(16):
        B.append(Int(i))

    s = Fuckr()
    for i in B:
        s.add(And(i >= 0, i <= 0xFFFF))

    for i in xrange(4):
        for j in xrange(4):
            s.add(
                B[i + 0 * 4] * A[j + 0 * 4] +
                B[i + 1 * 4] * A[j + 1 * 4] +
                B[i + 2 * 4] * A[j + 2 * 4] +
                B[i + 3 * 4] * A[j + 3 * 4] == R[i * 4 + j]
            )
    r = []
    if s.check() == sat:
        r = []
        model = s.model()
        for i in xrange(16):
            r.append(model[B[i]].as_long())
    else:
        print 'Oops'

    return r


编写脚本进行解密,经过测试还需要正确排列解密密钥的顺序。测试后
[Python] 纯文本查看 复制代码
def De_cry(HexData):[/i]
[i]    s0, s1 = HexData[/i]
[i]    x0 = 0x0A728E203850A80E[/i]
[i]    x1 = 0x1B8E2679CCAEF6B4[/i]
[i]    for i in xrange(32):[/i]
[i]        x0 = ror(x0 ^ x1, 3)[/i]
[i]        s1 = ror(s1 ^ s0, 3)[/i]
[i]        x1 = rol(sub(x1 ^ (31 - i), x0), 8)[/i]
[i]        s0 = rol(sub(s0 ^ x0, s1), 8)[/i]
[i]    return s0, s1[/i]

[i]def De(HexData):[/i]
[i]    res = [][/i]
[i]    for i in xrange(0, len(HexData), 2):[/i]
[i]        res.extend(De_cry(HexData[i:i + 2]))[/i]
[i]    return res[/i]

[i]def De_PassWord(passwd):[/i]
[i]    l = unpack('>4Q', pack('>16H', *passwd))[/i]
[i]    l = De(l)[/i]
[i]    l = unpack('>16H', pack('>4Q', *l))    return l



0x7 Done:
[Python] 纯文本查看 复制代码
A = [0x1380, 0x4E4, 0x2709, 0x2035, 0x25FA, 0x56DA, 0x103, 0x1531,
    0x0CAA, 0x1A61, 0x0E07, 0x20, 0x0E2, 0x123F, 0x0C0, 0x0DC7]

R = [0x146FC26A, 0x2434019A, 0x16B2964E, 0x1DFCC164,
    0x10766B04, 0x1F67E99D, 0x13905802, 0x14A99DA3,
    0x2AE5CE6C, 0x4048AA7F, 0x33CF9B5F, 0x2C101662,
    0x2DF5FCE4, 0x4C26C74C, 0x2CD5980F, 0x2BA9DEDB,]

xor_key = [0x90DF, 0x70BC, 0x0EF57, 0x5A96, 0x0CFEE, 0x5509, 0x80CE, 0x0D20,
    0x0E14F, 0x70E, 0x0A446, 0x2FC6, 0x0ECF0, 0x5355, 0x782B, 0x6457]

def Fuck():
    B = []
    for i in xrange(16):
        B.append(Int(i))

    s = Fuckr()
    for i in B:
        s.add(And(i >= 0, i <= 0xFFFF))

    for i in xrange(4):
        for j in xrange(4):
            s.add(
                B[i + 0 * 4] * A[j + 0 * 4] +
                B[i + 1 * 4] * A[j + 1 * 4] +
                B[i + 2 * 4] * A[j + 2 * 4] +
                B[i + 3 * 4] * A[j + 3 * 4] == R[i * 4 + j]
            )
    r = []
    if s.check() == sat:
        r = []
        model = s.model()
        for i in xrange(16):
            r.append(model[B[i]].as_long())
    else:
        print 'Oops'

    return r

def ror(n, c, bits=64):
    mask = (1 << bits) - 1
    return ((n >> c) | (n << (bits - c))) & mask

def rol(n, c, bits=64):
    return ror(n, bits - c, bits)

def sub(n, c, bits=64):
    mask = (1 << bits) - 1
    return (n - c) & mask

def xor_passwd(passwd):
    l = [0] * 16
    for i in xrange(16):
        l[i] = passwd[i] ^ xor_key[i]
    return l

def De_cry(HexData):
    s0, s1 = HexData
    x0 = 0x0A728E203850A80E
    x1 = 0x1B8E2679CCAEF6B4
    for i in xrange(32):
        x0 = ror(x0 ^ x1, 3)
        s1 = ror(s1 ^ s0, 3)
        x1 = rol(sub(x1 ^ (31 - i), x0), 8)
        s0 = rol(sub(s0 ^ x0, s1), 8)
    return s0, s1

def De(HexData):
    res = []
    for i in xrange(0, len(HexData), 2):
        res.extend(De_cry(HexData[i:i + 2]))
    return res

def De_PassWord(passwd):
    l = unpack('>4Q', pack('>16H', *passwd))
    l = De(l)
    l = unpack('>16H', pack('>4Q', *l))
    return l

passwd = Fuck()
passwd = De_PassWord(passwd)
passwd = xor_passwd(passwd)
print(''.join(map(chr, passwd)))


Key = BKP{KYU7EC!PH3R}
123.png


Download:
[Asm] 纯文本查看 复制代码
https://www.crack.vc/index.php?dir=Exercise/&file=cutie-keygen.zip

免费评分

参与人数 23吾爱币 +20 热心值 +23 收起 理由
610100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
webmarksman + 1 + 1 谢谢@Thanks!
GNUBD + 1 + 1 谢谢@Thanks!
helloword121 + 1 + 1 谢谢@Thanks!
海天一色001 + 1 + 1 谢谢@Thanks!
2864095098 + 1 + 1 热心回复!
Ravey + 1 谢谢@Thanks!
很快再相见123 + 1 + 1 我很赞同!
涛的世界 + 1 + 1 谢谢@Thanks!
soyiC + 1 用心讨论,共获提升!
文可う润心 + 1 + 1 谢谢@Thanks!
ccm5085 + 1 + 1 我很赞同!
方妍心 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
netease67 + 1 + 1 谢谢@Thanks!
海底总动员 + 1 我很赞同!
Rea + 1 + 1 咦!?纳尼!中文!!!
beatone + 1 + 1 我很赞同!
jusdy_xiao7 + 1 + 1 用心讨论,共获提升!
as614001 + 1 + 1 我很赞同!
lin295693097 + 1 + 1 谢谢@Thanks!
wi5101 + 1 + 1 谢谢@Thanks!
xiaoxinjian + 1 + 1 用心讨论,共获提升!
cr4ck + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

好心分手 发表于 2017-5-22 07:38
支持下楼主 给力
cr4ck 发表于 2017-5-22 07:59
sy2512885 发表于 2017-5-22 08:03
每次大哥发的东西对于我这种菜鸟来说,永远都是乱码……
凉拌梨心儿 发表于 2017-5-22 08:53
支持楼主  给力
雫Hao洋洋 发表于 2017-5-22 08:57
莫名的感动,多久没看到S哥帖子里出现汉字了
wangcejmp158 发表于 2017-5-22 09:17
大佬就是大佬,很给力这回
仙峰涯 发表于 2017-5-22 10:54
我终于看懂一次Sound大神的帖子啦,以前都是英文,帖子里还有源代码很好的学习经验。
hao1234566 发表于 2017-5-22 14:25
终于不是英语了
Rea 发表于 2017-5-22 20:46
咦!惊现中文!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 10:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表