有趣的安全游戏--哈密顿行动(四)突破程序的锁
2017-09-12 20:49
246 查看
第四题据说已经加强了
终于来了道逆向题····虽然是PE的,好吧,还是不擅长
题目信息:
题目啥都没说,就是一道注册类题,不过难度不大
先开始用IDA分析,看着真蛋疼,搜了一些函数符号,发现是VB的(起始图标很明显了)
下了个VB的分析工具,VB Decompiler,反汇编查看
可以好好看看这个校验函数,结合IDA可以动态调试,会用OD的应该更简单。
整个过程有三处做校验,分别对应为用户名校验、密码加密校验以及密码唯一值确定校验
第一处校验比较简单,就是完全匹配用户名,如截图
第二处校验是一个加密算法,读取密码中的每一字节,前后字节相加减去0x64,新生成的字符串和存储在内存中的字符串比较,这里要注意对应比较的是地址中的内容,不是地址值(被自己坑了)
针对此处的校验,可以枚举出密码,大概也有几十个,枚举的代码如下:
第三处校验是基于第二次的校验,因为枚举出了很多,但答案是唯一的,因此此处过滤出了正确答案,走到这里,可以用IDA看看了,因为VB反编译出来的有一点误差,此处校验的方式是将字符串首尾字节相乘,与一固定值作比较,查看枚举的字符串,得到答案。
提交成功~
终于来了道逆向题····虽然是PE的,好吧,还是不擅长
题目信息:
题目啥都没说,就是一道注册类题,不过难度不大
先开始用IDA分析,看着真蛋疼,搜了一些函数符号,发现是VB的(起始图标很明显了)
下了个VB的分析工具,VB Decompiler,反汇编查看
可以好好看看这个校验函数,结合IDA可以动态调试,会用OD的应该更简单。
整个过程有三处做校验,分别对应为用户名校验、密码加密校验以及密码唯一值确定校验
第一处校验比较简单,就是完全匹配用户名,如截图
第二处校验是一个加密算法,读取密码中的每一字节,前后字节相加减去0x64,新生成的字符串和存储在内存中的字符串比较,这里要注意对应比较的是地址中的内容,不是地址值(被自己坑了)
针对此处的校验,可以枚举出密码,大概也有几十个,枚举的代码如下:
for first in range(0,0xff): badVal = 0 arr = [] nextval = 0 for i in range(0,len(resultList)): if i == 0: nextval = resultList[i] + 0x64 - first arr.append(first) else: if nextval < 0 or nextval >= 0x7f or nextval < 0x20: badVal = 1 break arr.append(nextval) nextval = resultList[i] + 0x64 - nextval if badVal == 1: continue if arr[11] + first == resultList[11] + 0x64: resultStr = "" print "first : %x %x" %(first,(arr[0]*arr[11])) for z in arr: resultStr += chr(z) print resultStr arr = []
第三处校验是基于第二次的校验,因为枚举出了很多,但答案是唯一的,因此此处过滤出了正确答案,走到这里,可以用IDA看看了,因为VB反编译出来的有一点误差,此处校验的方式是将字符串首尾字节相乘,与一固定值作比较,查看枚举的字符串,得到答案。
提交成功~
相关文章推荐
- 有趣的安全游戏--哈密顿行动(零)图灵测试
- 有趣的安全游戏--哈密顿行动(二)不该存在的配置文件
- 有趣的安全游戏--哈密顿行动(一)神秘的网页
- 有趣的安全游戏--哈密顿行动(三)加密的文件
- Java游戏开发:有趣的扑克牌建模程序
- (ヒトコト)一个挺有趣的东西!作为一个动漫宅,游戏宅来说还是一个挺有趣的接口!banner上面就是
- 游戏人文件夹程序 ver 3.0
- Java 安全:简单谈谈JAVA程序的反编译
- 类与接口的一个有趣程序例子
- Mogre学习系列(5)如何使用Ogre建立游戏程序
- Java篇:编写安全可靠程序的75条建议
- J2ME手机游戏引擎程序结构简述
- HDU 4547 CD操作 2013金山西山居创意游戏程序挑战赛——初赛(1)
- iOS应用程序安全(19)-在程序中使用Introspy
- 编写安全的Symbian C++游戏代码
- uva 1204 Fun Game 有趣的游戏 字符串集合的动态规划
- 2013金山西山居创意游戏程序挑战赛——复赛(1) 涂色游戏
- 展示编写的一个有趣C程序
- 安徽手机捕鱼游戏iOS版开发移动电玩城程序正规开发公司
- 【程序11】猜数游戏