Nisy 发表于 2015-10-23 19:31:59

ManyCam v5.0.5 简单分析



群里又在群.P.软件,于是下载一起搞下,加了 Themida 的壳,不过里边的关键代码没有 V 掉,所以还是可以很轻松的定位到关键点 :


014A1FF0    55            PUSH    EBP
014A1FF1    8BEC            MOV   EBP, ESP
014A1FF3    A1 F032F401   MOV   EAX, DWORD PTR DS:
014A1FF8    83EC 10         SUB   ESP, 10
014A1FFB    85C0            TEST    EAX, EAX
014A1FFD    74 1C         JE      SHORT ManyCam.014A201B
014A1FFF    8B40 08         MOV   EAX, DWORD PTR DS:
014A2002    83F8 02         CMP   EAX, 2                           ; Pro 版本
014A2005    74 0B         JE      SHORT ManyCam.014A2012
014A2007    83F8 03         CMP   EAX, 3                           ; Studio 版本
014A200A    74 06         JE      SHORT ManyCam.014A2012
014A200C    33C0            XOR   EAX, EAX                         ; 未注册
014A200E    8BE5            MOV   ESP, EBP
014A2010    5D            POP   EBP                              ; ntdll.77AB019D
014A2011    C3            RETN
014A2012    B8 01000000   MOV   EAX, 1                           ; 注册版
014A2017    8BE5            MOV   ESP, EBP
014A2019    5D            POP   EBP                              ; ntdll.77AB019D
014A201A    C3            RETN



看到这个代码,可想而已,整个关键点应该就是这个类对象的枚举成员,是什么类型。但是有 themida 的内存效检,所以如果修改内存代码的话,还需要搞定 themida 的内存效检,这样相对比较麻烦。

a_p 给了以下一些方案,这里简单整理下:

1.对任意代码下内存读硬件断点,跟到后逐层返回 VM_HANDLE 然后来过效检。
2. SMC 直接去搞掉效检。
3. 找到 themida 数据解密前的数据,并修正为需要Path后的数据。

以上三种体力活,不好搞,于是又有以下一些方案:

1. Dll 进去找到初始化赋值 ,然后修改赋值。
2. 定位到这个全局对象,然后直接赋值为3。
这两个方案都是直接修改内存值来达到过效检的。先说方案一的实现,a_p 哥的实现方案如下:


67001160 Qt5Core.??0QString@@QAE@ABV0@@Z// 初始化后会调用这个函数 于是在这个QT DLL的函数尾部Path汇编代码

Path 在函数尾段 ...

67232B0A      60                     PUSHAD
67232B0B      9C                     PUSHFD
67232B0C      E8 0D000000            CALL 67232B1E

// ManyCam.exe
67232B11      4D                     DEC EBP
67232B12      61                     POPAD
67232B13      6E                     OUTSB                                             ;I/O command
67232B14      79 43                  JNS SHORT 67232B59
67232B16      61                     POPAD
67232B17      6D                     INSD                                              ;I/O command
67232B18      2E:                      PREFIX CS:                                        ;Superfluous prefix
67232B19      65:78 65               JS SHORT 67232B81                                 ;Superfluous prefix
67232B1C      0000                     ADD BYTE PTR DS:,AL

67232B1E      8B0424                   MOV EAX,DWORD PTR SS:                        ;ManyCam.0109439C
67232B21      FF90 9B060000            CALL DWORD PTR DS:                        // GetModuleHandleA
67232B27      83F8 00                  CMP EAX,0x0
67232B2A      74 07                  JE SHORT 67232B33
67232B2C      C680 E85FC900 03         MOV BYTE PTR DS:,0x3
67232B33      9D                     POPFD
67232B34      61                     POPAD
67232B35      C2 0400                  RETN 0x4


方案2 我是直接下硬件断点,中断后,读取该全局变量地址,直接对其成员赋值。


gagmeng 发表于 2015-10-23 19:46:19

沙发,支持校长

yy11 发表于 2015-10-23 19:55:50

看不懂,只知道楼上的很有名

cdygr 发表于 2015-10-23 20:10:51

yy11 发表于 2015-10-23 19:55
看不懂,只知道楼上的很有名

同感,看不懂NISY是非常牛的牛人!

a__p 发表于 2015-10-23 20:58:34

我系统是winxp,只能跑4.x 然后晚上远程调试 lynx 的电脑操作看了一圈,5.x和4.x代码不一样,标志位地址不是固定的地址,所以补丁地址要多几行代码.判断一下释放解码完毕
6723F49A    60               PUSHAD
6723F49B    9C               PUSHFD
6723F49C    E8 0D000000      CALL 6723F4AE
6723F4A1    4D               DEC EBP                                 ; // ManyCam.exe
6723F4A2    61               POPAD
6723F4A3    6E               OUTSB
6723F4A4    79 43            JNS SHORT 6723F4E9
6723F4A6    61               POPAD
6723F4A7    6D               INSD
6723F4A8    2E:            PREFIX CS:
6723F4A9    65:78 65         JS SHORT 6723F511
6723F4AC    0000             ADD BYTE PTR DS:,AL
6723F4AE    8B0424         MOV EAX,DWORD PTR SS:
6723F4B1    FF90 130D0000    CALL DWORD PTR DS:         ; 获得 ManyCam.exe 内存模块地址
6723F4B7    83F8 00          CMP EAX,0x0                           ; 判断是否获取到
6723F4BA    74 07            JE SHORT 6723F4C3
6723F4BC    8B80 F032C000    MOV EAX,DWORD PTR DS:   ; 获取 标志位内存地址
6723F4C2    83F8 00          CMP EAX,0x0                           ; 判断是否解码
6723F4C5    74 04            JE SHORT 6723F4CB
6723F4C7    C640 08 03       MOV BYTE PTR DS:,0x3         ; 根据获取到的标志位地址+偏移 修改成3
6723F4CB    9D               POPFD                                 ; 0是Free版 1是Studio版 2是Studio版 3是Enterprise版
6723F4CC    61               POPAD
6723F4CD    C2 0400          RETN 0x4


wangwei628 发表于 2015-10-23 21:01:18

太复杂了
没看懂

Nisy 发表于 2015-10-23 22:25:01




Manycam V5.0.5 破解版 PYG特别版 Cracked By Nisy && a__p

补丁下载:https://www.chinapyg.com/thread-81208-1-1.html

menglv 发表于 2015-10-24 07:52:27

谢谢楼主分享

gujin162 发表于 2015-10-24 21:28:09


小伙伴都说好,不能错过!

Nisy 发表于 2015-10-25 11:04:25

cdygr 发表于 2015-10-23 20:10
同感,看不懂NISY是非常牛的牛人!

得动手去调试下 这个软件定位关键点不难 难在如何赋值
页: [1] 2
查看完整版本: ManyCam v5.0.5 简单分析