吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6145|回复: 4
收起左侧

[分享] *nf的***辅助的破解分析

  [复制链接]
透明色 发表于 2014-6-16 18:45
好久没来发帖了 , 这几天在清理硬盘, 顺便就发一个 , 仅做交流 , 欢迎大牛指正

易语言写的辅助, 外壳是vmp的 , 打开之后界面如下:


使用好几个版本的od, 都被anti了 , hawod倒是可以 ,不稳定

说一个思路:
  验证过程 部分代码被vm了 , 因此考虑用补丁数据的方法 , 使用wpe 跟踪下包 ,
  发现加密的包 主要有三个. 重点跟踪下这三个包的解密位置.

第一个包的解密位置如下:

0045EBC8      5F            pop edi                                  ;  第一个包 追出解密数据
0045EBC9      5E            pop esi
0045EBCA      5B            pop ebx
0045EBCB      8BE5          mov esp,ebp
0045EBCD      5D            pop ebp
0045EBCE      C2 0C00       retn 0xC

看一下正版的数据:

    0x31, 0x31, 0x34, 0x2e, 0x38, 0x30, 0x2e, 0x31, 0x35, 0x36, 0x2e, 0x34, 0x37, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x62, 0x36, 0x62, 0x31, 0x31, 0x35, 0x35, 0x38, 0x36, 0x38, 0x32, 0x63,
    0x39, 0x31, 0x36, 0x38, 0x63, 0x66, 0x34, 0x61, 0x37, 0x34, 0x35, 0x34, 0x65, 0x31, 0x66, 0x62,
    0x65, 0x30, 0x61, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x6c, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

一堆 00 , 不晓得为什么冗余数据这么多

补丁这一组数据之后 , 程序界面打开了 , 但是查询账户剩余时间失败 ,估计和另两个包有关 , 接着分析


软件打开之后 ,释放了两个dll , mlib.dll mdll.dll 应该是vc 写的com , 另外两个包的解析就在这里了

第二组包 是一个ip地址 , 没意义

解密第三组包的位置
mdll.dll
10034573       8B7408 10       mov esi,dword ptr ds:[eax+ecx+0x10]      ; 二次包补丁地址
10034577       8B4408 14       mov eax,dword ptr ds:[eax+ecx+0x14]
1003457B       3D FFFFFF2F     cmp eax,0x2FFFFFFF
10034580       0F85 86000000   jnz mDll.1003460C
10034586       391D A0DF0810   cmp dword ptr ds:[0x1008DFA0],ebx
1003458C       75 63           jnz short mDll.100345F1

其中这个esi 就是用户账户的剩余时间 ,eax 是一个识别码 ,只补丁寄存器就可以了


补丁第三组数据 , 程序显示剩余时间 , 可以运行了 , 但是 有几分钟 又会提示 失败.程序退出

除了第一个包之外 , 其它的都在 验证的线程里面 , 这种情况应该是验证线程sleep之后 , 再次进行验证导致的

这里笔者又偷懒了 , 使用xuter  看一下线程, 有一个入口有 mlib.dll 里面的 很可疑 , 把它挂起 ,就可以了



实际的分析过程还是挺复杂的 , 分析记录写了不少 ,
  有点意思的就是验证线程控制主线程的方式 ,猜测应该是 PostMessage自定义的消息来实现的, 使用api 跟踪发现 ,
     确实有一堆 0x600 以上的 消息 , 而windows的窗体的消息 一般都是 在0x400 以下的
  实际跟踪一下 确实如此 , 具体没有再做分析

之后是写代码 ,使用dll注入, 第一个断点处 补丁数据 , 启动自己的线程 等待验证dll
载入, ,设置第二个断点 , 补丁数据之后 , 等几分钟把验证线程挂起 ,搞定

注意 :程序使用了动态基址 , dll载入的地址是可变的

帖一部分代码吧


LONG WINAPI VectoredHandler( PEXCEPTION_POINTERS ExceptionInfo)
{
  static TCHAR  result[3000];
  int tid= GetCurrentThreadId();
  DWORD* top = (DWORD*)ExceptionInfo->ContextRecord->Esp;
  DWORD call_from= *top;

  if (ExceptionInfo->ContextRecord->Eip == (DWORD)g_point )
  {
    outf("----断点一-----\n");
    outf("当前所在的线程 %x \n" , GetCurrentThreadId());
    BYTE*  tmp = (BYTE* )(ExceptionInfo->ContextRecord->Ebx );

    outf("第一组数据 %x \n", tmp);
    outf("ebx =  %x \n", ExceptionInfo->ContextRecord->Ebx );
    tmp-=0x1c0;
  //  bin2str( result , tmp , 0x1c0);
  //  outf("%s\n" , result);
    memcpy(tmp,g_patch,0x1c0);
    ExceptionInfo->ContextRecord->Edi = *top;
    ExceptionInfo->ContextRecord->Esp+=4;
    ExceptionInfo->ContextRecord->Eip++;
    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)setPoint2(), NULL, 0, NULL);
    return EXCEPTION_CONTINUE_EXECUTION;   
  }else if( ExceptionInfo->ContextRecord->Eip == (DWORD)g_point2){
    outf("----断点二-------\n");
    outf("当前线程 %x\n" , GetCurrentThreadId());
    BYTE*  data = (BYTE* )ExceptionInfo->ContextRecord->Ecx ;
    data += ExceptionInfo->ContextRecord->Eax;
    //outf("解密数据的位置 %x \n", data);
    bin2str( result , data , 0x26);
    outf(" 三次数据 : \n%s\n" , result);
    ExceptionInfo->ContextRecord->Eax = 0x2FFFFFFF ;
    ExceptionInfo->ContextRecord->Esi = 30 ;
    ExceptionInfo->ContextRecord->Eip +=4;
  //  memcpy(data,path2,0x26);
    *(path2+0x16)-=1;
    //*g_point2 = 0x8B;
    setPoint(g_create_thread);
  ......

免费评分

参与人数 2热心值 +2 收起 理由
loveliuhao323 + 1 完全看不懂,但支持
Passerby + 1 要是有教程版的就完美了,

查看全部评分

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

心断空 发表于 2014-6-16 20:04
膜拜楼主是大牛
Passerby 发表于 2014-6-16 20:58
在追解密位置的地方 好像直接忽略了这部分 楼主求补

关键精华所在的技术 感觉心痒痒。
Passerby 发表于 2014-6-16 21:02
我觉得找解码位置的方法 是用未解密的封包数据进行内存搜索找到后,下断往下走几段路

应该就到解码处  不知道大牛我这个思路对嘛?
 楼主| 透明色 发表于 2014-8-10 23:24
本帖最后由 透明色 于 2014-8-10 23:26 编辑
Passerby 发表于 2014-6-16 21:02
我觉得找解码位置的方法 是用未解密的封包数据进行内存搜索找到后,下断往下走几段路

应该就到解码处  不 ...

下条件断点 recv  或者 recvfrom  , 条件是数据的长度 . 之后 下硬件读写就可以了

这个程序主程序是 E 的 , 之前不懂易 , 所以看到它的反汇编 , 直接晕菜 , 最近几天玩了下易 , 如果是再搞的话 , 就不准备用补丁数据的方法了, 直接补丁汇编 就可以了 ,

很多网络验证, 通常是只加密 ,不混淆的 , 补丁数据是一种好方法
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-18 02:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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