第二个小东东是个小程序,是破解《飞跃英语Ⅳ》遗留下来的一个东东,价值不大,不过扔掉又可惜,所以就顺便贴上来吧。另外对我来说也是有点纪念意义的。
《飞跃英语Ⅳ》是我最后的一个破解,这套软件包含《我爱背单词2001》、《泛读》、《百部速读》等一系列程序,加密原理都一样,主程序用VB5,接口C写的DLL,另外有一个驻留进程不断和飞跃网站联系核对注册码。如果检测到盗版注册码就在硬盘和注册表里写入标记并要求联网再注册。破解也是有两种方法:1、去掉驻留进程和程序自效验,用已知的注册码注册,或者爆破。2、跳过注册对话框,去掉所有限制(就是根本不注册但有注册版本的功能)。这个软件加密还可以,花了我两个礼拜的时间才分析透,笔记一大叠。由于和作者联系并交流过加密和解密的技巧,所以也就不方便写出来了。
下面的程序和破解无关。因为《泛读》、《百部速读》的文档加密,所以不能添加自己喜欢的文章到软件中读。我跟踪了程序,找到加密原理,它是根据一个密码表进行字节的XOR,所以是可逆的。我写了解码程序,下面的这两个密码表是共享版的,零售版不同,但都能在程序相同的位置上找到。不过后来我嫌他的程序不能放大/缩小窗口、也不能一行一行移动,就自己写了一个功能类似的程序用,下面的程序也就再也没用过了。只贴出来交流一下。用TC2写和编译,是对以前流行TC时代的怀念。
#include
#include
#include
void main( void )
{
FILE *fpIn, *fpOut;
char szInName[100],szOutName[100];
char cChar;
char szCode1[0x38]={ //密码表1,解码泛读系列。从W32Dasm的反编译文件中拷贝过来的(1000e030)
0x17, 0x0E, 0x1A, 0x7B, 0x4F, 0xDF, 0x93, 0x0E,
0x3A, 0x1A, 0xE8, 0x2E, 0x58, 0xC1, 0x2C, 0x1B,
0x34, 0x5A, 0xCF, 0x0A, 0x57, 0x19, 0xF9, 0xB1,
0xDC, 0xAF, 0x17, 0x84, 0x21, 0x2D, 0xBB, 0x9C,
0x20, 0x9C, 0x22, 0xE8, 0xBD, 0x9C, 0xB7, 0xA7,
0x16, 0x16, 0x21, 0x1B, 0x21, 0xF4, 0xBC, 0xA5,
0x86, 0x1B, 0x3A, 0x62, 0x2D, 0xE0, 0xB2, 0x4E};
char szCode2[0x38]={ //密码表2,解码百部速读系列。从W32Dasm的反编译文件中拷贝过来的(1000e068)
0x7B, 0x3A, 0xE2, 0x17, 0xB3, 0x17, 0x2F, 0xD6,
0x9E, 0xE2, 0x20, 0x92, 0xBC, 0x5D, 0x90, 0x07,
0xFC, 0xBE, 0xCF, 0xD2, 0xBB, 0x7D, 0x31, 0x4D,
0x14, 0x4B, 0x7B, 0x20, 0xE9, 0x91, 0x57, 0x38,
0x84, 0x38, 0xEA, 0x20, 0x59, 0x38, 0x53, 0x43,
0xDE, 0x7A, 0xE9, 0xE3, 0xE9, 0x2C, 0x58, 0x41,
0x22, 0x7F, 0x9E, 0xC6, 0x59, 0x22, 0x4E, 0x4E};
char *pCh1,*pCh2;
char *szCode;
szCode=szCode1; //定义它则解码泛读系列
// szCode=szCode2; //定义它则解码百部速读系列
printf("Input in file name:"); //取原文件
gets( szInName );
if (*szInName==0x0)
exit(0);
printf("Input out file name:"); //取转化后文件
gets( szOutName );
if (*szOutName==0x0)
exit(0);
fpIn=fopen( szInName,"rb" ); //打开原文件
if ( ! fpIn )
{
printf("Can not open %s\n",szInName);
exit(0);
}
fpOut=fopen( szOutName,"wb" ); //创建转化后文件
if ( ! fpOut )
{
printf("Can not create %s\n",szOutName);
fclose(fpIn);
exit(0);
}
pCh2=szCode+0x38; //pCh2指向密码表最后一个字符的下一位
while ( true )
{
for ( pCh1=szCode; pCh1{
if ( feof(fpIn) ) //如果结束
{
fclose(fpIn);
fclose(fpOut);
printf("success");
exit(0);
}
cChar=fgetc(fpIn); //得到字符
cChar ^= *pCh1; //xor解码
fputc(cChar,fpOut); //写入解码字符
}
}
}
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>