菜鸟中的菜鸟 发表于 2014-10-7 21:37

修改软件加密标题

本帖最后由 菜鸟中的菜鸟 于 2014-10-7 21:44 编辑

打开VS2010,写个自测试MFC,用加密函数加密一下
char* CabcdeDlg::Decrypt(char* s,WORD k)//解密函数
{
      char *p = NULL;

      for(int i=0;i<strlen(s);i++)
      {
                s = s^123;
                s -= k;
      }

      p = s;

      return p;
}

char* CabcdeDlg::Enjcrypt(char *s, WORD k)//加密函数
{
      char *p = NULL;

      for (int i=0; i<strlen(s); i++)
      {
                s +=k;
                s = s^123;
      }

      p = s;

      return p;
}

void CabcdeDlg::Init()
{
      char s[] = "蓯稑";
      char* pResult = Decrypt(s,1);
      SetWindowText(pResult);
}

在MFC初始化函数加调用Init(); 对话框为如下:
https://www.52hb.com/data/attachment/forum/201410/07/203406tvm9etjv333we8cb.png
注:因为在WIN7下基址会变化,这里测试编译器基址不变。为方便OD处理。设置编译器如下:
https://www.52hb.com/data/attachment/forum/201410/07/203552y2t2l2zldlxlrr0t.jpg
下面开始修改软件加密标题。OD载入abcde.exe。下SetWindowTextA断点。bp SetWindowTextA, 运行程序,调用堆栈如下:
https://www.52hb.com/data/attachment/forum/201410/07/203912iv5dvagff0aldocj.png
这里反汇编窗口中跟随,找到调用的位置,如下:
https://www.52hb.com/data/attachment/forum/201410/07/204121z5qhthqg203f0hri.png
说明是在MFC100.DLL里调用的,在RETN 0x4下断,重新截入,运行,断在这里,F8运行,目的是回到调用这个函数的程序领空里,
回到调用处,在段首下断,跟踪,如下:
https://www.52hb.com/data/attachment/forum/201410/07/204540ip1n7q7tpkajsuou.jpg
在00401890处可以看到, 经加密过的最后解密后把字符串放到edx里了,这里可以直接把edx里的值想法改掉就行了。因为空间比较小,
所以在空白区域写,右键,查找字符串,里面输入一串00,点确定,就到了空白区域处。 在这里找个位置写入。
https://www.52hb.com/data/attachment/forum/201410/07/204954qzuaxgu7ydygnx7x.png 这里就从004027EE开始,把上面改成JMP到这个地址处,如下:
https://www.52hb.com/data/attachment/forum/201410/07/205129m4fftec94jffs39t.jpg 所以现在要在004027EE处写代码了。这里自定义标题,所以可以
mov edx,"自定义的字符串", 再调用setwindowtexta设置新的字符串,之后再跳到原来的地址处,顺序执行。如下:
先把这个保存成abcde_1.exe,再次截入OD,余下的就是在00404910处写入自定义的
字符串了,如下图:
https://www.52hb.com/data/attachment/forum/201410/07/205654y4imugtfv84stnlu.png 9.png (5.83 KB, 下载次数: 0)
下载附件
半小时前 上传


现在已经写入成功了,省下的就是保存了,保存为abcde_2, 修改成功。
如下图:
https://www.52hb.com/data/attachment/forum/201410/07/205845y088nl7pnm88f07f.jpg
这里只是一种方法,方法很多,好处是不用管算法,还有一种暴力的方法,也是patch的,重新写setwindowtext,覆盖掉原来的,也行。

MFC测试程序下载:

Crack杰 发表于 2014-10-7 21:42

请上传附件,并且@我,来置顶

菜鸟中的菜鸟 发表于 2014-10-7 21:46

Crack杰 发表于 2014-10-7 21:42
请上传附件,并且@我,来置顶

已上传!谢谢各位了。

雨季 发表于 2014-10-8 07:45

{:5_116:}支持一下

Shark恒 发表于 2014-10-9 19:51

新手学习的一个好机会。希望看到楼主更多的精彩教程!

战股神 发表于 2014-10-9 21:51

很经典的改法,顶了!

菜鸟中的菜鸟 发表于 2014-10-9 22:02

战股神 发表于 2014-10-9 21:51
很经典的改法,顶了!

大神来个暴力,犀利的改法吧。。。。。求方法求思路。

bigeorry 发表于 2014-10-10 15:38

我叉。我很早就在找这教程了。谢谢了楼主了!

bigeorry 发表于 2014-10-10 15:55


大神,如果直接把“lea edx,dword ptr ss:”改成“mov edx,dowrd ptr ss:”
然后在“00404910”处编辑好新的标题,这样能成立吗?

Dean 发表于 2014-10-11 16:33

原来这么做,明白了
页: [1] 2 3 4
查看完整版本: 修改软件加密标题