加密与解密示例程序TraceMe.exe逆向&算法分析
来源:互联网 发布:算法引论 中文版 pdf 编辑:程序博客网 时间:2024/05/17 05:02
OD加载程序,可以看到有2个输入框
由于要逆向分析,应该在程序获取用户输入之后,做计算之前开始分析
定下思路,先向得到字符串的函数下断,然后返回、跟踪程序代码分析即可。
程序是ANSI编码,出现长成这样的对话框有俩种可能的函数:
一个一个试试。
反汇编窗口中Ctrl+G跟踪函数
找到后下硬断(软断对DLL无用)
同理,另一个函数的查找,下断过程就不赘述了
运行程序,输入用户名,随便填一个序列号
如果用户名小于4个,则不会调用算法计算,故应将用户名加长
序列号随意,没有也罢
点击Check,发现程序卡在硬断处
Alt+F9回到软件领空
发现是GetDlg函数
而且紧接着下面还有一个
一路步过即可
运行到如图所示位置就应该开始注意了
首先在数据窗口中Ctrl+G跟踪Esp+0x4C
发现就是用户名的储存位置
那么下一句Test大约就是判断用户是不是没有输入东西了
Cmp是看看用户是不是输入了5个以下的字符(不知道多会,EBX已经变成了你输入的用户名的长度)
略过即可
再下面的俩个lea分别对应储存用户名的内存地址和你输的序列号,略过
CALL调用程序内地址,较为可疑,跟入
大略扫一下,判断+各种计算,大约就是算法地址了
好好分析一下
其中给ECX赋常数较为可疑(即MOV ECX,3)
以后注意
仔细观察下方jle,比较ecx(即3)与字符串长度的值(esp+0x18处的值稍加观察即可发现是字符串长度)
也就是判断你是不是输太短了,太短了就直接跳,不运行算法,并且报错
步过
这个循环一股脑的在计算什么东西,目测就是序列号了
分析算法可得,循环跳过用户名的前3个字符,依次将字符的Ascii码与一段程序内的内存对应相乘,并且将结果累加到Esi
分析下各个寄存器的作用
EAX:程序内的内存指针,与ECX一同递增,每次与字符Ascii相乘,且运算完第8个数后循环回第一个数
ECX:用户名内存指针,跳过用户名前3个字符
BL:字符Ascii
DL:和字符Ascii相乘的Hex
ESI:结果存放
EDI就是字符串长度,判断是不是要继续循环
到这里算法分析就基本结束了
循环结束后,将Hex换成等价的十进制数,并与用户输入的进行对比,相同则成功
用VBS写了这个程序的注册机,代码如下:
str = InputBox("Enter:")If Len(str) < 4 Then WScript.QuitDim Map(7)Map(0) = &HCMap(1) = &HAMap(2) = &H13Map(3) = &H9Map(4) = &HCMap(5) = &HBMap(6) = &HAMap(7) = &H8For i = 4 To Len(str)[结果] = [结果] + Asc(Mid(str,i,1))*Map((i-4) Mod 8) 'Mod 8 即对应运算完第8个数后循环回第一个数的汇编代码NextMsgBox [结果]
- 加密与解密示例程序TraceMe.exe逆向&算法分析
- 通过纯静态分析来还原算法,获取《加密与解密》第2章的TraceMe的注册机
- 常用加密与解密算法示例代码
- 加密解密-TraceMe—注册机
- 加密与解密算法
- 加密与解密(逆向常用API)
- 加密与解密(逆向常用API)
- DES加密与解密示例
- 《加密与解密(第三版)》读书笔记第4章(逆向分析 阅读汇编代码)
- 加密解密算法总结分析
- openssl aes 加密解密示例程序
- openssl aes 加密解密示例程序
- DES加密与解密算法
- rsa加密与解密算法
- rsa加密与解密算法
- DES算法加密与解密
- 简单的加密与解密示例
- 加密与解密(逆向过程中的Delphi特色)
- ClickableSpan造成Listview的OnItemClickListener失效的解决办法
- laravel框架总结 -- ORM模型
- 新闻营销、微博营销、微信营销、视频营销、论坛营销、问答营销、写作策划、报刊发表
- bootstrap如何点击按钮出弹框
- Activity基本组建
- 加密与解密示例程序TraceMe.exe逆向&算法分析
- CSU-ACM2017暑假集训2-二分搜索 poj-2456 Aggressive cows-最大化最小值
- HDU
- mylife
- Python入门系列——第10篇
- doT.js
- mysql 拼接字符串(concat函数&&concat_ws函数)
- POJ 3061-Subsequence(尺取法,二分)
- js分页,显示/隐藏页码