加密解密心得

1. 破解按钮对话框,先下相应对话框的消息断点,断下来之后,再下GetWindowTextA/W和GetDlgItemTextA/W的断点,顺序不对的话,会严重影响调试的效率

2.在逆向的过程中,如果遵循一定的方法的话,可以节约很多的时间。我认为通过找特征字符串和特定的函数,这种方法比较快。先将程序运行一遍,看有什么提示框之类的没有,若有,记下字符串。可使用totalcmd等工具搜索改字符串在那个文件当中,然后用IDA反汇编。IDA是不能显示中文字符的,可通过设置unicode字符串的编码格式,再找到特征字符串,将其转换成utf-8格式的。然后搜索交叉引用。

3.常常需要找到按钮事件,可根据特征码来定位。

4.下断点要讲究顺序,否则容易走入死胡同。比如函数A调用了z,还有很多地方调用了z,如果一开始就下z的断点的话,就会断很多次,必须先下A的断点,A处断下之后,再下z的断点。

5.好好利用VM的内存快照功能。一个有用方法是假如你在一片内存中发现了一些重要的数据,记住这个点,而你在此之前有作快照的话,回到原来的快照,下那个内存地址的写断点,然后运行,当然可能会断好几次,一次次排除掉。最后找到写该数据的地方。这个比一层一层反向推导要快得多。从这一点来看的话,刚开始调试的时候要做一个快照,以备不时之需。此方法的依据是在系统在某个时刻的静态稳定性,也就是说从一个快照衍生出来的其他快照内存的布局基本上是稳定的。

6.在逆向的过程中可能会碰到加密算法,识别加密算法的关键在于对加密算法的熟悉程度。在检查加密算法的时候,可使用peid的Krypto Analyzer插件来检查加密算法。对于加密算法中函数的识别,最有效的方法是制作器IDASig文件,当然得先知道其使用的加密库和对应的版本。

7.逆向的时候不要拘泥于细节,找出关键的参数即可。把每个语句都分析清楚会浪费你大量的时间。

8.使用IDA时,多观看函数的接口,有时需要根据汇编代码来修正函数的原型。哪些参数是输入,哪些是输出,根据结果大概就可以判断出函数的功能了。

9.不要期待IDA的F5反编译出来的代码会和源码一致,它只能模拟出函数的大致原型。在很多时候,反编译出来的代码会有众多goto语句。因此当你找不到某些参数的入口时,则认真观察是否有从其他地方跳转至此。例如一个if-else结构,就有可能从if模块跳到else模块里。

10. 一般来说,软件都会采用第三方的库来实现一些功能,这些库大都是开源的。如果能够找到这些库,编译后利用IDA的sig功能,就能够很快地识别出第三方的函数。关于怎么找,有一个办法就是通常软件使用的第三方库都会在协议或者关于里说明。如此,可省去很多力气。

你可能感兴趣的:(加密解密,破解)