首页
社区
课程
招聘
[原创]*nf的***辅助的破解分析
发表于: 2014-6-16 18:17 11095

[原创]*nf的***辅助的破解分析

2014-6-16 18:17
11095

好久没来发帖了 , 这几天在清理硬盘, 顺便就发一个 , 仅做交流 , 欢迎大牛指正

易语言写的辅助, 外壳是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);
  ......


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (17)
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
2
来围观一下猪猪侠,嘿嘿...
2014-6-16 18:19
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
五月份外快XXXXXX元的那个大牛?
2014-6-16 18:41
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
4
,呵呵,不是,我只是觉得楼主的头像有点猪猪侠的味道...
2014-6-16 18:43
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
6位 , 确实达不到
2014-6-16 21:58
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
强烈围观LZ
2014-6-16 22:02
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我这种小菜也只能围观一下了,看到6位数的眼睛就睁不开了。。
2014-6-20 22:46
0
雪    币: 102
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
这个是麦兜噢.
2014-6-20 22:50
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
9
呵呵,恩,是麦兜,让我想起了猪猪侠...
2014-6-20 23:03
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark,你懂得
2014-6-21 19:33
0
雪    币: 10822
活跃值: (3874)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
围观支持了,感谢分享了
2014-6-21 23:39
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2014-6-25 11:19
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mark
2014-6-28 02:14
0
雪    币: 1
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
围观也是一种美德!
2014-6-29 02:37
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
MARK
2014-6-29 07:24
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
有几个听懂的我想没有。
2014-7-13 15:20
0
雪    币: 253
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习思路,谢谢
2014-7-22 13:43
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
牛人呀!膜拜
2014-7-25 07:44
0
游客
登录 | 注册 方可回帖
返回
//