前两天在看一个别人搞的程序,手上只有Hex,所以就直接用IDA来反汇编看了。有些心得给大家随便说说
这个程序很明显是有ST官方提供的标准库开发的,运行在STM32F072上面
库函数开发确实容易,但是给逆向 一定程度上也带来了极大的容易
几个原因
1:如果查看过keil生成的map文件,就可以知道ARMCC的链接器(link)在生成可执行文件的时候,函数的排列是按照字母顺序来的。
比如说,这个程序的开发者用到了USB的HID功能,所以我强行用官方的hid库函数历程编译了一个程序,查看编译完MAP文件
很明显的按字母顺序排列
2:ST的库函数(不管标准库,hal库等等),他的函数命名方式都是为 外设名字_xxx功能
比如GPIO_DeInit GPIO_Init GPIO_ReadInputData等等,用过的都知道
那么结合第一条 这一个外设的库函数内容 必定会被安排在一起
3:熟悉库函数的,经常用的,对函数的功能基本上都比较了解。
对比C写的内容,用十几秒,一分钟就能确定这个函数的名字,直接重命名函数为库里面的名字
这样节约了大量的时间去自己分析这个函数是干嘛的(如果不是库函数,一个函数的内容,往往要花少则几分钟,多则小半天的时间去研究他的运行机理)
虽然汇编用熟了不难,但是确实不友好。
这里随便贴一贴这个被完全逆向完的程序。所以函数都被完全的读懂在干嘛(即被重命名)
这个程序只花了不到48小时,就被完全捅穿了。所有明锁,暗锁,加密都像被衣服脱干净了一丝不挂的曝光在大摄像机镜头下
打码的函数是作者自己写的私有内容,为了保护,就打码了,没打码的都是库函数
说这么多,抛出个问题,让大家自己想,我不说,怎么样写程序,才是不容易被逆向破解的?欢迎大家畅所欲言
最近编辑记录 posystorage (2018-08-18 21:42:17)
离线
顺便吐槽一句 这个论坛啥都好,就是图片上传真的太蛋疼了
最近编辑记录 posystorage (2018-08-18 21:43:46)
离线
逆向最怕的就是那种要某种条件达到才能被爆发的问题,
比如开机1000次后,要输入一个验证码,
这种很隐蔽的问题破解的时候未必能预测到。
这个程序本身不算大,全部把他弄懂要的时间不长。当然程序大了那不一样了
离线
产品要有硬件以外的附加值和生态圈绑定用户,这样抄了硬件,也没有威胁
不断更新升级,走在破解者的前头,增加破解者的破解成本
离线
加密算法是怎么破解出来的,一般加密运算后不是都把自身删除了吗?难道你拿的是原厂的HEX,不是从MCU读出来的?
离线
待逆向的内容怎么会有那么多符号信息在里面? 拿到的是obj?
离线
待逆向的内容怎么会有那么多符号信息在里面? 拿到的是obj?
是哦,不说我还没发现。
此人很懒,没有签名!
离线
感觉你们好强大,努力学习
离线
请问楼主,您这是什么软件?
离线
IDA Pro
离线
IDA Pro
谢谢!
我买过一本《IDA Pro 权威指南(第2版)》一直吃灰中,软件长啥样都不知道;只知道这工具是破解的好工具。
离线
顶!学习了。
离线
顶!学习了。
离线
学习下逆向技术,好针对性的做加密。
离线
逆向技术需要花的功夫,还不如直接写一个了。
离线
有符号表和没有符号表就是两个东西,纯粹的hex,反编译出来,还要把符号表都改好,没那么容易。这个试同一个程序。
离线
黑盒逆向猜可能要尝试无数次才能最终获得正确答案。。。。
离线
自己编译有符号表的,带hal库的,bindiff一下就能识别函数了,不用自己费劲看
离线