hi,我是个老程序员,但在破解领域着实是个菜鸟。
在世界经济危机的大环境下,要想不失业,就要为自己铸起一个高门槛。微软一统桌面的内因,我感觉其开发工具丰富、门槛低,入门快是个很重要的因素。吃“软饭”越来越不容易,看看周边小自己1轮的同事,我突然发现,他们懂的不比我少多少,但薪水却不在一个级别上,我突然有了强烈的危机感。
我可以做什么呢?如何筑自己的高门槛呢?我想到了破解,这是程序员发挥个人英雄主义的最佳领域。在集体协作开发的大时代下,没有什么比这个领域,更能让个人智慧发挥到极致的地方了。我这个老程序员,抱着朝闻道,夕可死的态度,决定投身破解。感谢pediy,让我这个菜鸟,在没有账号的情况下,也能够浏览很多有价值的篇章。
废话一大堆,谁让我是菜鸟呢。
下面是正文,菜鸟的n个土招:
我破解的第一个东东,是个sip客户端(ip电话)的口令加密算法;
该软件是个窗口程序,首先用peid查看,没有加壳(最好不过,我还不会卸壳),是vc写的,口令在一个dialog的edit中输入,点击ok后,加密口令被保存在文件中。
首先,我想找到ok按钮的处理函数,baidu来baidu去,baidu到了“Reversing MFC Applications.pdf”,获益不浅,自己写了个MFC的测试程序,遵循pdf中的步骤,顺利找到了button处理函数。
于是,打开ip电话,od附身,查看executable modules,咦,没有发现MFCxx.dll,我倒,软件不是MFC写的,前面的经验暂时作废。
vc写的,没有mfc,看来是sdk编的,继续baidu,翻论坛,找到一些文章对我很有启发,但我总是不得要领,看着一堆堆的汇编语句,头真的很大。
突然,我想到1个土招,按钮的resource id,这个值是个立即数,我在od中查找该立即数,不算太多,再在其上下浏览,将可疑地方,都加上断点,好像一共有10多个breakpoints,影响范围不是很大,点击button,呵呵,其中1个断点生效,看来我的人品还不错^_^。
断下来了,然后做什么呢,看着一堆的mov、lea、add,我晕s。
想到其口令保存在文件中,于是在WriteFile下断点尝试,ok,断下了,执行后,文件内容已经改变。
好的,现在,我有了起点(button点击),有了终点(文件内容变化),我的目标是找到中间那个加密函数。
我f8、f7的跟着,一不小心就进user32了,又一不小心进了ntdll,我跟了半天,乱糟糟,啥也没跟出来。
范围太广,必须想办法缩小范围,我就想啊,想啊,突然,人品爆发,我想,它写密文到文件,密文必然首先存在于内存;内存有了密文,那加密函数,必然刚刚执行完毕!
于是,我就不断的f8,搜索内存(加密后的串),终于在某个call后,密文出现于内存。
于是该call处下断,f7跟进,shit,里面又是好多的call,不过,方法同上,搜内存,缩小包围圈,终于到了某个call,该call前,没有密文,该call后,出现密文,该call内,没有其他call。太棒了!看来这个加密算法,不是很强,没有调用啥加密库函数。
下一步就是写注册机了(给出明文,输出密文)
这个函数的反汇编不是太长,但足以让我昏头,前辈们曾说过,很多菜鸟可以在内存中找到注册码,但却写不出注册机,前辈良言啊,菜鸟joyrice果然被卡这里了。
如何才能call这个该死的函数呢?
我想啊想,找啊找,找到了dll注入,CreateRemoteThread,想在软件内部执行该call,不过测试代码总是报错,而且,代码编写复杂,暂时放弃。
突然,人品再次爆发:我写了1个vc程序,将该软件用LoadLibrary装入内存,然后,嘿嘿,
__asm
{
push param1
push param2
call function
}
哈哈,人品果然好,密文出来了!!!
菜鸟的第一次破解成功,感谢pediy给了我学习和分享的机会。
(破解过程还有其他技巧,exe的基址,算法会取exe数据区内初始化后的数据等,但大致框架,都已描述,谢谢大家看到这里)
在世界经济危机的大环境下,要想不失业,就要为自己铸起一个高门槛。微软一统桌面的内因,我感觉其开发工具丰富、门槛低,入门快是个很重要的因素。吃“软饭”越来越不容易,看看周边小自己1轮的同事,我突然发现,他们懂的不比我少多少,但薪水却不在一个级别上,我突然有了强烈的危机感。
我可以做什么呢?如何筑自己的高门槛呢?我想到了破解,这是程序员发挥个人英雄主义的最佳领域。在集体协作开发的大时代下,没有什么比这个领域,更能让个人智慧发挥到极致的地方了。我这个老程序员,抱着朝闻道,夕可死的态度,决定投身破解。感谢pediy,让我这个菜鸟,在没有账号的情况下,也能够浏览很多有价值的篇章。
废话一大堆,谁让我是菜鸟呢。
下面是正文,菜鸟的n个土招:
我破解的第一个东东,是个sip客户端(ip电话)的口令加密算法;
该软件是个窗口程序,首先用peid查看,没有加壳(最好不过,我还不会卸壳),是vc写的,口令在一个dialog的edit中输入,点击ok后,加密口令被保存在文件中。
首先,我想找到ok按钮的处理函数,baidu来baidu去,baidu到了“Reversing MFC Applications.pdf”,获益不浅,自己写了个MFC的测试程序,遵循pdf中的步骤,顺利找到了button处理函数。
于是,打开ip电话,od附身,查看executable modules,咦,没有发现MFCxx.dll,我倒,软件不是MFC写的,前面的经验暂时作废。
vc写的,没有mfc,看来是sdk编的,继续baidu,翻论坛,找到一些文章对我很有启发,但我总是不得要领,看着一堆堆的汇编语句,头真的很大。
突然,我想到1个土招,按钮的resource id,这个值是个立即数,我在od中查找该立即数,不算太多,再在其上下浏览,将可疑地方,都加上断点,好像一共有10多个breakpoints,影响范围不是很大,点击button,呵呵,其中1个断点生效,看来我的人品还不错^_^。
断下来了,然后做什么呢,看着一堆的mov、lea、add,我晕s。
想到其口令保存在文件中,于是在WriteFile下断点尝试,ok,断下了,执行后,文件内容已经改变。
好的,现在,我有了起点(button点击),有了终点(文件内容变化),我的目标是找到中间那个加密函数。
我f8、f7的跟着,一不小心就进user32了,又一不小心进了ntdll,我跟了半天,乱糟糟,啥也没跟出来。
范围太广,必须想办法缩小范围,我就想啊,想啊,突然,人品爆发,我想,它写密文到文件,密文必然首先存在于内存;内存有了密文,那加密函数,必然刚刚执行完毕!
于是,我就不断的f8,搜索内存(加密后的串),终于在某个call后,密文出现于内存。
于是该call处下断,f7跟进,shit,里面又是好多的call,不过,方法同上,搜内存,缩小包围圈,终于到了某个call,该call前,没有密文,该call后,出现密文,该call内,没有其他call。太棒了!看来这个加密算法,不是很强,没有调用啥加密库函数。
下一步就是写注册机了(给出明文,输出密文)
这个函数的反汇编不是太长,但足以让我昏头,前辈们曾说过,很多菜鸟可以在内存中找到注册码,但却写不出注册机,前辈良言啊,菜鸟joyrice果然被卡这里了。
如何才能call这个该死的函数呢?
我想啊想,找啊找,找到了dll注入,CreateRemoteThread,想在软件内部执行该call,不过测试代码总是报错,而且,代码编写复杂,暂时放弃。
突然,人品再次爆发:我写了1个vc程序,将该软件用LoadLibrary装入内存,然后,嘿嘿,
__asm
{
push param1
push param2
call function
}
哈哈,人品果然好,密文出来了!!!
菜鸟的第一次破解成功,感谢pediy给了我学习和分享的机会。
(破解过程还有其他技巧,exe的基址,算法会取exe数据区内初始化后的数据等,但大致框架,都已描述,谢谢大家看到这里)
浙公网安备 33010602011771号