当前位置:首页 >> 破解资源

PC端同花顺公式指标解密机制分析


收集目标信息    :
PC端同花顺公式指标解密机制分析

1.png


PC端同花顺公式指标解密机制分析

1.1.png


  PC端同花顺公式指标解密机制分析

3.png


PC端同花顺公式指标解密机制分析

1.2.png


PC端同花顺公式指标解密机制分析

2.png



  
  
软件名称:同花顺
主程序名称:hexin.exe
目标模块:公式指标
文件格式:HXF
提示信息:失败提示“公式密码错误,请重新输入”      成功提示“”
壳信息:压缩壳
反调试:有
选择工具:
OllyDbg(吾爱)
IDA7.6(吾爱)
PEID(吾爱)
16进制计算器
                                                                                                                                                                         正文:


附加载入程序,让程序跑起来解码,跳转到401000搜索提示信息字符串
PC端同花顺公式指标解密机制分析

4.png

  
  PC端同花顺公式指标解密机制分析

5.png


没有搜索到字符串,转为函数做进入点。有弹窗提示断MessgaeBox,F8返回程序代码段,并在段首和MessgaeBox设下断点(防止程序不经过段首)。
PC端同花顺公式指标解密机制分析

6.png


  PC端同花顺公式指标解密机制分析

7.png


PC端同花顺公式指标解密机制分析

8.png


成功断在段首并且堆栈发现错误信息,直接执行到段尾并返回到调用代码段,继续段首和Call下断。(直接执行到段尾是因为堆栈已经压入错误提示信息,说明调用代码已经识别出密码错误)。
PC端同花顺公式指标解密机制分析

10.png

  
PC端同花顺公式指标解密机制分析

11.png


成功断在段首并提示错误信息,继续执行到段尾并返回调用代码段,发现堆栈提示了一串字符“13579888”,记录下来,继续返回调用代码段并在段首和Call下断(会连续返回几次调用代码,直接换上发现字符串信息的图)
PC端同花顺公式指标解密机制分析

12.png


PC端同花顺公式指标解密机制分析

13.png


发现堆栈提示Textchanged事件信息。
PC端同花顺公式指标解密机制分析

14.png


继续执行发现可疑字符串“1IDJAKDPAIDBAJDBAJD”  “198236‘  ”399170“ 记录下来继续执行。
PC端同花顺公式指标解密机制分析

15.png



PC端同花顺公式指标解密机制分析

16.png


继续执行弹出密码错误信息窗口,发现上方test对比和je条件跳转。重新执行test指令开始的代码并更改标志位测试其他结果,分析出跳向密码成功和密码失败。
PC端同花顺公式指标解密机制分析

17.png

   
PC端同花顺公式指标解密机制分析

19.png


在Test指令上方还有对比和跳转指令,重新执行整个代码段,详细分析流程。
[Asm] 纯文本查看 复制代码
00989D9C    8378 F4 00      cmp dword ptr ds:[eax-0xC],0x0           ; 核心判断00989DA0    C785 B8FDFFFF 0>mov dword ptr ss:[ebp-0x248],0x100989DAA    74 04           je short hexin.00989DB0                  ; 关键跳转00989DAC    32DB            xor bl,bl00989DAE    EB 02           jmp short hexin.00989DB200989DB0    B3 01           mov bl,0x100989DB2    C745 FC 0600000>mov dword ptr ss:[ebp-0x4],0x600989DB9    F685 B8FDFFFF 0>test byte ptr ss:[ebp-0x248],0x100989DC0    74 12           je short hexin.00989DD400989DC2    83A5 B8FDFFFF F>and dword ptr ss:[ebp-0x248],-0x200989DC9    8D8D C0FDFFFF   lea ecx,dword ptr ss:[ebp-0x240]00989DCF    E8 8C88A7FF     call hexin.0040266000989DD4    84DB            test bl,bl00989DD6    74 5A           je short hexin.00989E3200989DD8    8B4D D5         mov ecx,dword ptr ss:[ebp-0x2B]00989DDB    6A 00           push 0x000989DDD    6A 40           push 0x4000989DDF    51              push ecx00989DE0    E8 F65E8300     call hexin.011BFCDB                      ; 弹出错误消息

密码错误                                                                                                            
PC端同花顺公式指标解密机制分析

失败.jpg

        
密码成功
PC端同花顺公式指标解密机制分析

成功.jpg


初步确定这就是要定位的目标代码段,重新载入程序逆向往上分析,每一个上方Call都断点F7进入分析,断点Call出来后重新载入程序。(重新载入是为了清除内存残留数据)
一路往上分析到00989D57    E8 0489A7FF     call hexin.00402660  这里会处理输入的假码存放和转存。
PC端同花顺公式指标解密机制分析

20.png


继续向上分析,00989D10    E8 12D98200     call hexin.011B7627           这里会弹出密码输入窗口。
PC端同花顺公式指标解密机制分析

21.png


这里Push EAX出现了真码的信息,上方有一个Call,F7进入。
PC端同花顺公式指标解密机制分析

22.png


进去一路分析到接近段尾,发现真码存放地址。
PC端同花顺公式指标解密机制分析

23.png


真码地址上方发现循环运算和转存的行为。分析发现真码就是由此计算出,但来源数值很可疑,继续往上分析发现还有一处循环计算和转存,也就是说是两次解密操作。
PC端同花顺公式指标解密机制分析

24.png

      PC端同花顺公式指标解密机制分析

25.png


此处直接获得了两次解密的算法,基本确定这是一个解码的Call,但还要追踪一个问题,那便是”1IDJAKDPAIDBAJDBAJD“,继续逆向分析。
进入上一个Call发现”1IDJAKDPAIDBAJDBAJD“出现于00AF16BA    8B41 60         mov eax,dword ptr ds:[ecx+0x60]处。
PC端同花顺公式指标解密机制分析

55.png

  
PC端同花顺公式指标解密机制分析

26.png


分析发现这个地址是存放真码的地址,重点追踪ECX。返回调用代码一眼就看到了MOV ECX,EDI,追踪ECX变成EDI。
PC端同花顺公式指标解密机制分析

27.png


继续分析发现EDI来源于堆栈中,追踪由EDI变为EBP。
PC端同花顺公式指标解密机制分析

EBP.png


EBP来源于ESP.....00989B91    8BEC            mov ebp,esp
PC端同花顺公式指标解密机制分析

28.png


MOV EBP,ESP
MOV EDI,DWORD PTR SS:{EBP+0x8}
MOV ECX,EDI
ECX+0x60=1IDJAKDPAIDBAJDBAJD的地址
08应该是一个对象,60则是这个对象的成员。
这个位置已经到达了段首,那么基本可以确定并不是在打开目标模块的时候才读取文件加密信息,而是程序在启动时便加载了文件夹里所有的HXF加密信息。源假码在启动时便压入了堆栈。
HXF文件解密的一个流程:

                                                                                                                 ;软件启动获得加密文件源假码信息并把地址Push
0098BC9E    E8 EDDEFFFF     call hexin.00989B90                               ; 解密模块
00989C96    E8 35327C00     call hexin.0114CED0                              ; 两次解密源假码得到真码      
00989D10    E8 12D98200     call hexin.011B7627                              ; 弹出密码输入窗口
00989D66    8378 F4 00      cmp dword ptr ds:[eax-0xC],0x0            ; 判断输入密码位数是否小于0
没截图                                                                                                     ;转存真假码对比结果,00 or  01
00989D9C    8378 F4 00      cmp dword ptr ds:[eax-0xC],0x0           ;cmp 对比结果,0x00
00989DAA   /74 04           je short hexin.00989DB0                           ; 跳转
00989DE0    E8 F65E8300     call hexin.011BFCDB                             ; 密码错误窗口Call