瞎猫碰上死耗子 破解超时代加密视频
本帖最后由 liwj 于 2020-3-26 00:24 编辑瞎猫碰上死耗子 ,破解超时代加密视频,在网上下载了一些学习视频,不料是超时代加密,但不知道哪个版本,问了一下专业人士,说是超时代3.6版本,要破解得花150,{:1_907:},为了这150,上网收索一下超时代3.6的加密器
不料,还真有,自己给MP4文件进行加密,也生成一串注册码,把这注册码放到那些学习视频,结果不成功,不能用,但是放到自己的加密视频却可以播放,得出一个结论,自己加密的视频能被这注册码识别,而网上加密的视频
是不识别这注册码,那该怎么办?又上网百度,摸清了播放流程,流程是这样:识别注册码-解密加密的视频-播放。从流程来看,能不能用OD调试自己的加密视频,找到解密视频的代码,然后将其用Visio 2019编译器逆向这些代码
从而解密视频文件,经过测试,这个思路完全正确,而且能解密在网上下载来的视频【所以说是瞎猫碰上死耗子,误打误撞】。下面请看如何用OD调试找到播放器解密视频的地方:
附上vector 基本使用代码,一般软件被vm的数据都可以使用vector 进行处理
void checkaddr(int Findwhat){
vector<int> veci;
vector<int>*p =&veci;
FILE* fp, * fout;
char nameIn = "esi乘以8.avc";//这个就是刚刚分析的数据堆 保存的后缀可以随便写 不一定就是avc
int c, c2, c12, c212, c3212;
fp = fopen(nameIn, "rb");
fseek(fp, 0, SEEK_SET);
veci.reserve(100);
while (1) {
if (fread(&c, 4, 1, fp) != 1) break;
c2 = c ;
veci.push_back(c2);//读取数据堆 进行保存到vector
}
fclose(fp); fclose(fout);
// for(vector<int>::iterator it = p->begin(); it != p->end();it++){
//cout << it << endl;
// }
//获取某元素在容器里的相对位置与地址
vector<int>::iterator itit = std::find(veci.begin(),veci.end(),Findwhat);//定义一个zhi代器
if(itit == veci.end()){
cout << "error!" << endl;
}
else{
cout << endl;
cout << "========分割线========" << endl;
cout << std::distance(veci.begin(),itit) << endl ;
cout << &(*itit) << endl ; //这里就是数据的地址 在汇编代码里 可以直接调用这个地址 来进行访问数据
}
}
以上是超时代9.36单个文件提取代码,细细体会一下,分享完毕! 大佬太强了,着实佩服 那下好断点后,如何找到算法,其实是等READFILE 断下来后,在堆栈窗口找到buffer 然后数据窗口跟随,为什么要这样操作呢,其实就是要查看API读取了什么内容,这个buffer我的理解应该是个缓存的意思,在数据窗口查看这个缓存
读了什么东西,(这里要注意,用winhex 打开加密了的视频,记住这个二进制的数据),要是发现READFILE缓存保存了加密视频的二进制数据,那么就可以下一个内存访问断点或者硬件访问断点(为什么要这样下断点呢?因为要查
看汇编代码哪里访问了这些数据,哪里访问了这些数据,哪里就是算法),断下来后 就是算法了,就可以认真的读这些汇编代码了(建议在读这些汇编代码时,从代码的段尾往上读到段头【经验之谈,这样读不会感到眼花】) 下bp Readfile 断点 可以在B查看断点状态 加油
你一定可以
加油 你即将成为新一代大佬 在断下来后,找到堆栈窗口,在buffer那里数据窗口跟随,然后在数据窗口选中一个字节,下一个内存访问断点,(如果断点不起作用,就下个硬件断点) F9运行,这时就断在解密算法处(如何检验,方法是留意数据窗口,解密后的视频格式为MP4,以此作为判断标准) http://www.jz5u.com/Soft/softdown.asp?softid=97839这是9.36下载地址 对ReadFile不了解的朋友可以百度了解一下,我觉得它就是一个读取文件的api,要读取播放文件,所以就必须经过这个API