|
请教 去除千千静听的自校验
我跟踪了一下ttplayer5.6.0.0,完全没壳,很容易分析。 校验代码在exe里面,但校验值在dll里面,在第0x24字节开始的四字节是校验码。可以爆破,在exe的0x4b0251处有一个je,改成nop就去了自校验。 一般这种有MessageBox弹出来的分析方法都很简单,首先用OD载入,F9运行,弹出错误提示,点OD上面的暂停运行,找调用堆栈,找到最近一个exe空间的返回地址,跟过去,往上找函数入口(push ebp;mov ebp, esp),下断后再次运行,跟踪一下就万事大吉。 不过难得ttplayer都完全免费了,拿来练手还行,改了别人的东西发出去就不厚道了。 |
|
友情提醒话费充值钓鱼网站,请求高手为民除害!!
“因善被骗”和“因贪被骗”的待遇是不同的。。。 |
|
跨进程内存补丁制作求助
[QUOTE=batcom;829290]char szFileName[40] = {"c:\\gmg\\Mesa 12.00\\Mesa.exe"}; 第一句就错了,你路径也太特殊了,里面有0\,而且40buff也没有作收尾处理,所以变量里面存储的文件路径是有问题的。用strcmp吧。建议看看孙鑫老师的C++书籍有将这方面内容,打好基...[/QUOTE] LZ的是"0\"不是"\0",这没问题; szFileName末尾会被编译器补"\0",不需要收尾处理; memcmp没有用错,由于不知道后面是否会有"\0",所以用strcmp是不合适的。 从你的TarGetData2和WriteData2分析,应该是长je指令,改成长jmp指令,但是前者6字节,后者5字节,你这种改法偏移地址错位,除非这个je指令后面三个字节都是00,否则是会出错的。可以试试WriteData2改两个字节用90E9替代看看,如果还是情况依旧,可以先调试运行加载器,看它是否正常退出了。如果是正常退出了,再附加到目标进程看看patch有没有成功,如果也成功了那就是其他问题,比如patch时机太晚或者有自校验等等。 |
|
一种函数调用,没看懂意思,高手帮忙
VC编译器项目属性 -> C/C++ -> 代码生成 -> 基本运行时检查,这里如果选择了“堆栈桢”或者“两者”(两者包括堆栈桢),那么编译后将会有这段检测代码。 Debug下默认选择“两者”,而Release下则是“默认”,也就是不检测,可另行更改。 |
|
vc++ MFC程序中SetTimer调用无法通过编译!请指点
存在某些“自己写的代码”与“帖子的代码”不一致的人,我估计99%LZ属于这类人。 如果LZ的宏定义最后确实多了一个分号,那么出错提示将完全匹配。 |
|
vc++ MFC程序中SetTimer调用无法通过编译!请指点
因为你原来的宏定义是 #define ANIMAL_ID 1112; 而不是 #define ANIMAL_ID 1112 多了一个分号,细心很重要 |
|
毕业设计求助 基于DirectShow的音视频采集控制系统
给代码说看不懂,给教程说只是ppt |
|
毕业设计求助 基于DirectShow的音视频采集控制系统
DirectX的SDK里面就有,DXSDK\Samples\C++\DirectShow\Capture里面的例子都是,AMCap是摄像头视频采集,AudioCap是音频采集。 |
|
求教一个问题,困扰很久了
可以用const char* g_lpData = "\x01\x02\x03"这种形式定义,省去数组初始化的开销,不过要先写一个程序将500k的内容转换成这种形式就行了。 |
|
如何才能学好脱壳
一般先用硬件断点试esp定律; 如果不行并且猜测该程序是VC写的话,下断GetVersion或者GetVersionEx,第一条语句(或者往下偏几条防校验)断点条件加上[esp] < X,X代表Exe空间的最大地址(可用Alt+M观察),断下后返回往上找就能找到OEP; 同理,Dephi可以试试下断GetModuleHandle; 同理,MinGW-GCC,可以试试下断__set_app_type。 其他的可以找一个没加壳的exe用OD载入看入口特征,再相应下断。 普通壳一般用上面几种方法都容易找,太硬的壳我同样没辙。 |
|
SetUnhandledExceptionFilter函数在C、C++、VC中的使用
DWORD dwOldType; if(0==::VirtualProtect(lpvBase,0x1000,PAGE_EXECUTE_READ | PAGE_GUARD,&dwOldType)) 你原来的dwOldType是指针,没分配空间。 |
|
SetUnhandledExceptionFilter函数在C、C++、VC中的使用
#include <stdio.h> #include <stdlib.h> #include <windows.h> DWORD g_dwLabel0 = 0; LONG WINAPI GEHExceptionFilter(EXCEPTION_POINTERS* ExceptionInfo) { printf("Exception ...\n"); ExceptionInfo->ContextRecord->Eip = g_dwLabel0; return EXCEPTION_CONTINUE_EXECUTION; } void Bug() { __asm { mov eax, label0 mov dword ptr[g_dwLabel0], eax } *(int*)0 = 0; __asm { label0: } } int main() { SetUnhandledExceptionFilter(GEHExceptionFilter); Bug(); int a = 5; //如何转到此处继续运行,也就是怎么获取这条指令的地址呢?有没有标号什么的? printf("Exit Normally!\n"); return 1; } 如果要在Bug里面抛异常,并跳到Bug外面执行,那么esp会不平衡,不建议这么做。这里出异常后是跳到错误语句的下一句执行,这样对esp没影响。 如果非要跳到外面去,可以用setjmp和longjmp来做,不过还不如用__try...__except或者try...catch关键字呢。 PCONTEXT不需要自己定义,提示或许是有点问题,是几个宏的毛病,不要管它,直接用就行了。 |
|
SetUnhandledExceptionFilter以后try-catch为什么还会有效?
明白了,这么说try安装的SEH优先级永远是最高的,而想让程序出异常后总是先调用自己设定的ExceptionFilter则是不可能完成的任务,是这样吗? |
|
SetUnhandledExceptionFilter以后try-catch为什么还会有效?
这个似乎是那段代码有try,所以先跑到try里面处理了,结果修改了参数内容。那么如果想让程序出异常后总是先调用自己设定的ExceptionFilter里面是否是不可能完成的任务? |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值