某过期不给用一例逆向过程记录

 

某过期不给用一例逆向过程记录

目录

某过期不给用一例逆向过程记录    1

1、目标功能受限    1

2、看看PE信息:    1

3、查看未注册或受限时显示方式。    1

4、直接载入,看看入口点。    1

5、接下来,首选字符串查找法。    1

6、看看过期后会咋样    1

7、同步骤5查找字符串    1

8、暂停程序回溯堆栈    1

9、以上就是去掉时间检测的逆向。    1

10、后记    1

11、其他    1

 

 

SQL浏览器3.5.7

1、目标功能受限

如下图:只有30天过期后不能用的限制,必须购买使用,或者不用扔到垃圾筐里。

 

2、看看PE信息:

 

 

Oep大,节区清晰,但额外信息显示有压缩迹象,有可能加了壳,另外有个debug区???也太大了,难道把什么都包括进去了。

 

3、查看未注册或受限时显示方式。

直接用OllyDbg打开也行。欢迎界面显示剩余天数,猜测字符串格式为"Trial version, %d days remaining"。注意,这块地方的剩余天数肯定是计算得来,然后写上去。所以猜测流程肯定是这样:每次打开时,先检查是否注册,未注册,获取本机时间,和第一次记录的比较,再把结果展示。现在根据方法,我们有4种方法来找到关键过程语句:一是最简单的查找字符串,二是下界面显示文件的API(标准控件,SetWindowText或SetDlgItemText;GDI或DX界面的写文字方法,没遇到过,可能需要去查下),个人觉得这个离关键语句近,而且带字符串,可条件断点;三是加载资源的LoadResource,LoadString等,四是这个界面出现[F12]暂停回溯堆栈,

4、直接载入,看看入口点。

一切OK,没有可疑的地方。

5、接下来,首选字符串查找法。

序模块-cpu窗口-右键菜单-查找-所有被引用的字符串(自带的貌似只能是"push 立即数"或"move 寄存器 立即数"形式,常是SetWindowText(xx, "string")这种写法,资源形式动态的了,可能setWindowText(xx, pszString/arrayString) 这种写法),并开始[Ctrl+F]打字搜索"Trial version"就行了,不必全部,再[Ctrl+L],嗯,只有一处。

 

 

双击目标或者焦点在目标上时回车,到CPU窗口定位,很快发现其他关键信息:"注册给"字符串。两个之前都有可以跳过的跳转。

我这里第一处跳:MOV EBX,EAX改为MOV BL,1

第二处跳修改;JNZ 00AE618D改为JMP 00AE618D

右键菜单-编辑-复制所有修改到可执行文件-弹窗后再右键菜单-保存文件...-改名保存

6、看看过期后会咋样

我们先把系统时间调整到30天后,然后打开之前修改的文件。提示已经过期,并且是以第二个弹窗:给出三个选择,一个是购买,一个是注册,一个是关闭程序。除了第二个再弹窗,其他都会结束程序。

这里有一点不好,OllyDbg打开重命名的可执行程序,原程序信息缓存不能用。

7、同步骤5查找字符串

这个对话框和前一个有很大不同,这个显示都是固定不变的。找到字符串位置了可能看不到关键跳转,也许这个地方是关键跳转的下一级调用或者回调。

很明显这些文字都是静态显示,没有条件判断。

USER32.dll模块里

回调类似带有这样的lpDialogFunc对话框。

 

非模态对话框

HWND CreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);

HWND CreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit);

模态对话框

int DialogBoxIndirectParam( HINSTANCE hInstance, LPCDLGTEMPLATE hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);

int DialogBoxParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, PARAM dwInitParam);

 

以上两个非模态对话框或两个模态对话框的创建不管是ASCII还是UNICODE版都会调用CreateDialogIndirectParamAorW或DialogBoxIndirectParamAorW,全都调用CreateWindowEx。

HWND CreateWindowEx(DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam );

我们在已经导入的创建对话框函数上打断点,结果无反应。再在CreateWindowEx上打断,不过比可能较多,因为控件等窗口比仅一个对话框来的多。所以可先在USER32.CreateWindowEx下个[Shift+F2]条件断点UNICODE[[ESP+8]] == "Register."。因为CreateWindowEx有导入。

还有可能按钮标题可能后添加上去的,如调用

BOOL USER32.SetWindowTextW(hWnd,Text),它会调用SendMessage。

LRESULT WINAPI SendMessage( _In_ HWND hWnd, _In_ UINT Msg, _In_ WPARAM wParam, _In_ LPARAM lParam);

#define WM_SETTEXT 0x000C

user32.TranslateMessage BOOL WINAPI TranslateMessage( _In_ const MSG *lpMsg);

typedef struct tagMSG {

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG, *PMSG, *LPMSG;

 

如上,可能很慢定位。

8、暂停程序回溯堆栈

此外还可以通过出现注册对话框,按[F12]暂停,回溯调用堆栈。我们在第三个回溯找到了关键调用,这个调用阻塞了后面,即按钮后做出什么处理。

其实在前面我们查找字符串时已经可以看到的,就是往下滚动看看就看到和这个图一样的东西。

 

和前面一个预想的差不多,我们从[Alt+K]调用堆栈窗口,双击进入发起调用这个过程的地方,点击调用从。我们是断在这个proc_012ED3C4过程里的,从调用堆栈窗口看,CALL 012ED3C4是在过程proc_012EF64C里被调用的。

 

调用图如下,流程由堆栈记录,call(push),retn(pop),可在CPU窗口右下角堆栈里查看:

 

来到上一级调用后,看到有个跳转可以跳过,我们直接改为jmp跳,此为第三处检测跳。[F9]运行直接跳过弹窗来到主界面,限制就破除了。

 

9、以上就是去掉时间检测的逆向。

前面有注册窗口,我们还可以进行注册码逆向。这个比修改文件难,需要分析算法。

先这样。

10、后记

最后,我的OllyDbg有问题啊,第一次修改两处保存运行没问题,第二次修改两处就有问题,老是异常,找了好久,跟踪发现没有运行第二次修改,而在开始就崩溃了,不可能啊,郁闷好久。

由图也可以看出,前面debug节如此大就是包含了调试信息。

每次老以为修改处毛病,所以修改一处保存一下,不过文件较大比较辛苦。后来不时fc命令比较下,并且在ollydbg右键菜单-查找-所有修改:发现好多处,多了6、7处我未做的修改。靠坑爹啊。。。。

我记得某人说过ollydbg保存会有问题。

 

11、其他

判断文件存在很多方法CreateFile,FindFirstFile,FindNextFile,GetFileAttributesEx等。

BOOL kernel32.GetFileAttributesExW(FileName,InfoLevel,pFileinfo){

CALL ntdll.RtlDosPathNameToNtPathName_U

CALL ntdll.NtQueryFullAttributesFile

}

 

 

 

 

转载于:https://www.cnblogs.com/Fang3s/p/3932787.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值