1、疑问
我在刚接触逆向时,一直有一个很浓烈的疑问, 要不要学习密码学,如果要学那学到什么程度?
我在刚开始学习app逆向的时候,密码学部分一直是比较迷茫的状态
这玩意儿学了有啥用?
我为啥要知道他咋算的?
直接调库或者把代码扣出来就行,为啥要管他的计算过程?
我感觉初学者应该都会遇到点这个问题:很多课程都在教算法的原理,但是这玩意儿我学了好像没啥用?
所以密码学部分我一直都是往往复复学了N多遍,一学就想睡觉。过段时间看到大佬手撕算法又想去学,一打开视频又想睡觉。。。
最后磨了大半年,还是啥都不会...,直到近段时间分别在 web, app, exe的逆向经历让我对此感慨万千,也算有了个答案。
2、算法对逆向的帮助
2.1 简单猜算法
前两个月搞了一个平台的APP,加密一路跟到so里,但是so里面混淆绕的我眼花缭乱,各种方法来回跳,但是我菜也不会去混淆。。。两眼一黑
后面看到 jni 方法相同入参调用的结果相同,猜测应该是对称加密
对称加密基本就AESDES,而且在so代码中瞎逛的时候看到一个方法很像AES的init,类似于
这几个case,八九不离十是AES了,后面瞎试把它试出来了
把传入的一个字符串常量md5一下当作key 然后AES-ECB就结束了。。。
2.2 昨天刚发的某EXE程序逆向
在exe逆向时有一个登录的加密,说实话,真分析不动,代码又看不懂,动态调试又不会看变量值。。。
绕了一天的弯路,直接放弃,于是开始剑走偏锋:
看到那个加密结果长度一直都是十六进制的长度为40位,直接盲猜sha1签名,然后在反编译后的结果中,也可以很明显的看到sha1的特征——固定的特征值
然后直接hook这个方法就能搞定了
2.3 某程的参数
没想到过了大半年了,又开始搞web了,js都看不懂了,随便一个文件七万多行,还有那个b语法,真看不懂了
这个 ?. 现在都不知道是什么鬼玩意儿
又在webpack里面,跳得没完没了,那个堆栈比我显示器还长
跟了一天,第二天一来忘记昨天跟到哪儿了,直接崩溃,于是又想剑走偏锋
加密结果长度 32 位,一眼MD5,web端是js,直接WT-JS看下md5的代码
那四轮计算,加上结尾的这个赋值,太显眼了
于是直接大概翻一下代码,超级长一截的计算,很难不注意到这段代码,同样的结尾赋值:
打断点,成功断住,回一下堆栈结果就出来了,结束
之前跟了一天一晚的值,现在不到五分钟搞定
3、结论
从前面基本就能看出,我学了这么久到现在也不知道他的计算具体流程,只是通过他的一点特征去猜、去试,大海捞针,不过大海捞针至少有的捞啊
我自己也是个菜鸡,就我个人的看法可以给出一个答案了
算法的学习有必要吗?
我认为有必要,有时候能省很多力气,以上三个例子如果不是猜算法,我到现在依旧搞不出来。但是猜算法,几分钟出结果。
那算法需要学习到什么程度?
不需要特别清楚每个算法的计算流程,但是得知道大概如何识别算法,固定的模数、加密结果的长度、相似的运算流程等等。如果遇到比较明显的能猜个大概,基本就够用很长一段时间了。
至于算法魔改,到现在还真没遇到过,还是太年轻。我也不知道为什么,tm检测、混淆一个比一个狠,但是算法基本都标准算法,没有魔改
反正现在这种程度,对我来说是基本够用了,而且帮助很大,对于新手来说学的东西本来就多的一批,不太建议把很多的时间放在学习算法具体流程上,能大概区分算法特征就够了
等水平到能在so里硬扣算法的时候,再去学计算过程吧,扣着扣着你就感觉这玩意儿似曾相识,就像飞驰人生那个,上赛道跟回家一样
原文始发于微信公众号(逆向成长日记):逆向新手需要学算法吗?要学到什么程度?
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论