找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2953|回复: 1

关于电驴资源提取精灵 的逆向

[复制链接]

307

主题

228

回帖

7319

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5569 个
贡献
253 次
宅之契约
0 份
在线时间
945 小时
注册时间
2014-1-25
发表于 2014-8-2 12:20:28 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
电驴资源下载.exe (1.34 MB, 下载次数: 5)
这个是源文件,早上刚下的时候,我震惊了,输入verycd网址,如http://www.verycd.com/topics/2922088/不一会就会在下面出现解析出来的ed2k地址
因为大家知道电驴是现在设置了权限的,如果你不是钻石级会员,是没有下载链接的,这个工具却得到了链接
这是为什么呢?难道破解了?
带着这个疑问,开始着手研究,
QQ图片20140802114805.jpg

使用ida分析该程序,蛮大的,1M+,一般1M意味着里面将有至少上10W行C/C++代码了,当然包括所有你链接的库
先来整体分析:export->start->WinMain,打开以后是这样:
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
  return sub_501092(hInstance, hPrevInstance, lpCmdLine, nShowCmd);
}
一般MFC才是这样,我们再往下看
signed int __stdcall sub_501092(int a1, int a2, int a3, int a4)
{
  signed int v4; // ebx@1
  int v5; // esi@1
  int v6; // edi@1
  int v7; // ecx@5
  int v8; // eax@7

  v4 = -1;
  v5 = AfxGetThread();
  v6 = *(_DWORD *)(AfxGetModuleState() + 4);
  if ( sub_5053EC(a1, a2, a3, a4) && (!v6 || (*(int (__thiscall **)(int))(*(_DWORD *)v6 + 132))(v6)) )
  {
    if ( (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 80))(v5) )
    {
      v8 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 84))(v5);
    }
    else
    {
      v7 = *(_DWORD *)(v5 + 28);
      if ( v7 )
        (*(void (**)(void))(*(_DWORD *)v7 + 88))();
      v8 = (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 104))(v5);
    }
    v4 = v8;
  }
  AfxWinTerm();
  return v4;
}

这回无疑了,不过我机子上没sig,我也不太用sig这玩意所以关键函数都显示不出来,不过左边解析出来的4000+函数,让我还是压力很大
MFC最彻底的逆向方式,还是找资源控件DLG,然后找各自消息回调,分析类成员函数和变量,这是个很痛苦的过程,需要在MFC的消息结构体中和各种复杂类中分析老长时间,所以需要有种投机取巧的方式

回到程序,点击提取按钮点击以后,会变成正在提取,根据这个提示,首先想到SetWindowText,或者是尝试ollydbg下消息断点(不过这玩意我懒得试了)
于是让IDA用Windbg来调试下断,不过断下来的有点让我不知所措:
BOOL __thiscall sub_4FF391(int this, LPCSTR lpString)
{
  int v2; // eax@1
  BOOL result; // eax@2

  v2 = *(_DWORD *)(this + '8');
  if ( v2 )
    result = (*(int (__thiscall **)(int, LPCSTR))(*(_DWORD *)v2 + 128))(v2, lpString);
  else
    result = SetWindowTextA(*(HWND *)(this + 28), lpString);
  return result;
}
再跟出去又出现了这个
  v4 = (int)a1;
  if ( a1 )
  {
    if ( a4 )
      *(_DWORD *)a4 = 0;
    v6 = 0;
    switch ( a2 )
    {
      case 0:
        v7 = a3;
        *(_DWORD *)(v4 + 204) = 1;
        sub_4A4170(v4 + 64, (LPCSTR)*v7);
        sub_4FF391(v4, *(LPCSTR *)(v4 + 64));
        *(_DWORD *)(v4 + 204) = 0;
        SendMessageA(*(HWND *)(v4 + 28), 0x111u, (WPARAM)&unk_3000000, *(_DWORD *)(v4 + 28));
        break;
可见最后只是发了一个WM_COMMAND给某控件,连网络函数的影子都没见到,所以得另想办法
不过留心输出,会发现:每解析出一个地址,会有:
Unloaded D:\Windows\system32\peerdist.dll
Unloaded D:\Windows\system32\AUTHZ.dll
Unloaded D:\Windows\system32\USERENV.dll
自然而然想到下断点到peerdist加载的时候,所以sxe ld:peerdist,不过结果我啥都没得到,可能我用法不对,windbg也不是一直用
那么我就只好采用最根本的方式,bp loadlibrary,这次再点按钮就断下了,从loadlibraryw回到上级调用,会发现进入了wininet.dll空间
这回一目了然了,果然还是调用了wininet api的,很多网络功能都是靠这个实现的,找到了根源,那么这回目标明确,
直接在httpopenrequest和httpsendrequest上下断,程序稳稳地断了下来,结果如图:
QQ图片20140802114805.jpg
最主要看sendrequest第二个参数,他是请求的url,可以看到左边hex里www.verycd.gdajie.com/detail.htm?id=917073
而返回原程序领空,会发现这里有拼凑请求的代码段
最后拼凑的请求是:
EE FE EE FE EE FE EE FE  66 4C BA 45 B5 A8 00 1A  铪铪铪铪fL篍胆..
41 63 63 65 70 74 3A 20  69 6D 61 67 65 2F 67 69  Accept: image/gi
66 2C 20 69 6D 61 67 65  2F 62 6D 70 2C 20 69 6D  f, image/bmp, im
61 67 65 2F 78 2D 78 62  69 74 6D 61 70 2C 20 69  age/x-xbitmap, i
6D 61 67 65 2F 6A 70 65  67 2C 20 69 6D 61 67 65  mage/jpeg, image
2F 70 6A 70 65 67 2C 20  61 70 70 6C 69 63 61 74  /pjpeg, applicat
69 6F 6E 2F 78 2D 73 68  6F 63 6B 77 61 76 65 2D  ion/x-shockwave-
66 6C 61 73 68 2C 20 61  70 70 6C 69 63 61 74 69  flash, applicati
6F 6E 2F 76 6E 64 2E 6D  73 2D 65 78 63 65 6C 2C  on/vnd.ms-excel,
20 61 70 70 6C 69 63 61  74 69 6F 6E 2F 76 6E 64   application/vnd
2E 6D 73 2D 70 6F 77 65  72 70 6F 69 6E 74 2C 20  .ms-powerpoint,
61 70 70 6C 69 63 61 74  69 6F 6E 2F 6D 73 77 6F  application/mswo
72 64 2C 20 2A 2F 2A 0D  0A 52 65 66 65 72 65 72  rd, */*..Referer
3A 20 68 74 74 70 3A 2F  2F 77 77 77 2E 76 65 72  : http://www.ver
79 63 64 2E 67 64 61 6A  69 65 2E 63 6F 6D 2F 64  ycd.gdajie.com/d
65 74 61 69 6C 2E 68 74  6D 3F 69 64 3D 39 31 37  etail.htm?id=917
30 37 33 0D 0A 41 63 63  65 70 74 2D 4C 61 6E 67  073..Accept-Lang
75 61 67 65 3A 20 7A 68  2D 63 6E 0D 0A 00 AB AB  uage: zh-cn...
不骗你们,当时我逆向CSDN免积分下载地址获取器,他也是这么干的
所以目标明确,只需要知道这个网站是干啥的就行了,可以发现,这个网正是原始的verycd,里面资源号和verycd都是一一对应的!!!
该程序间接用这个网站来进行搜索,而并没有做黑客的事

其实很多程序看起来像黑客,做的事情其实很简单,就是借用别人的东西,实际上没干什么事情
另外这个程序这么大,核心代码估计还上不了300行,所以肯定是静态链接的MFC库

以后就到www.verycd.gdajie.com找东西好了
回复

使用道具 举报

KxIX 该用户已被删除
发表于 2014-8-2 12:35:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-3-29 09:47 , Processed in 0.042017 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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