大学打工时接的第一个私活

 

多吃苦,多学习,多磨练,不畏艰难,多积累,一生受用。...



大学时有很多的难忘的事情,但印象最深刻,现在还历历在目的,是大学时接的第一个高难度的私活,赚到的第一笔钱。

那个时候,很多的系统组件都会做成硬件,比如,汉卡,病毒卡,加密卡,加速卡,等等。接到的一个私活是解密加密卡。那时候的软件,为了保护防止盗版,除了软件,都会附带一个加密卡。只有在串口或是并口插上加密卡,软件才能正常运行,我的任务是破掉加密,让软件在没有加密卡的情况下也能运行。

当初敢接这个项目,不是由于年轻气盛胆子大,而是之前有积累,有历练,因为把BIOS代码读了好几遍,对于BIOS层面的内存管理,设备管理,中断管理,等等,了如指掌。

不但会读,会写汇编,而且掌握了加密的几个常用秘诀。

一是利用Timer。因为人去debug和跟踪执行代码的时间,一般会远远长于机器自动执行的时间。加密程序中会用各种方式隐藏和时间相关的操作,然后突然在某个地方检查一下执行的时间是不是超过预设的时间,如果超了,马上转换去执行另一段看着很合理的代码,故意误导。

二是利用中断,有的是Timer中断,有的是加密卡触发的中断。中断产生时,执行代码来改变代码中的某个变量,或是生产一段动态代码。然后,后续的程序会根据不同的变量值做相应的跳转,在众多的分支中只有一条路径是正确的。

三是代码生成代码。在一段程序,或是好几段程序中,去对某个内存块进行写,一次写一个或几个bytes,而这些bytes其实是可执行代码的一部分,经过很多次写之后,完成了一段代码。然后,在你不经意的时候,突然跳转到写好的代码上执行。经常跳转指令是动态生成的,而且会连续生成好几次,而且配合着Timer来控制,让你防不胜防。

掌握了相应的知识,熟练了相应的技能,真正实施的时候,一定要非常细致小心,稍不慎就会被带到沟里,耗时耗力。同时还要缜密思考,及时看出每段代码执行的意图。一旦被带到沟里,最后发现了,所有的事情需要从头开始,因为程序严重的依赖中断和时间来执行,没有一个统一的一致的执行路径。

这个项目,花了我两天两夜,不吃不喝,最后终于破解了。那时候常用的加密方式还是密钥,破解的过程就是在千变万化,深度隐藏,繁琐迷惑的运行中找到密钥。找到了之后,剩下的事情就好办了。

一般来说,加密卡会通过一段冗长和隐密的代码执行,得到第一个密钥。然后,这个密钥会解密出另外一段程序。通过执行解密出来的程序,得到第二个密钥,如果反复多次,知道最后解出软件真正的核心代码。

多吃苦,多学习,多磨练,不畏艰难,多积累,一生受用。


    关注 待字闺中


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册