算法逆向第1篇——简单算法逆向

本文作者通过分析勒索病毒提升算法逆向能力,分享了两个算法逆向实例:简单的算法逆向和解方程算法逆向。在简单算法逆向中,重点在于追踪分析ebx和esi值的来源;在解方程算法逆向中,介绍了如何定位关键算法、分析算法流程,并给出了源码实现。同时,文章还涉及了移位运算在逆向过程中的应用。
摘要由CSDN通过智能技术生成


微笑本文作者:icq5f7a075d


Music起~

“啊门 啊前 一棵葡萄树,啊嫩 啊嫩 绿地刚发芽,蜗牛背着那重重地壳呀,一步一步地往上爬~”

上周分析勒索病毒(GlobeImposter),笔者感觉自己算法的逆向能力很弱,于是找了些题目练手。本文逆向程序主要来源于《加密与解密实战攻略》,算法将用Python/C++实现。

既然有了算法逆向1,自然会有2、3、4……叶问说“我要打十个!”,笔者说“我要写十篇!”,甭管行不行,先立Flag! ——>文末有福利


1. 简单的算法逆向

预计时间:2h


1.1. 定位关键位置先随便输入,弹出了错误提示:

搜索字符串:Invalid!此时已经找到了关键位置。



上下翻找一番,0×00404167就是关键跳转,如果是crackme,那么直接把这里修改为jmp就可以了。而我们要进行算法逆向,就要追踪分析ebx和esi这两个值怎么来的。


1.2. 算法逆向

往上回溯,ebx的值来自于下图,过程还是比较简单,对输入name字符串进行计算,得到一个值,以这个值为编号,在表0x4050B8中取值:



往上回溯,esi的值来自于此,也比较简单对输入密码字符串进行计算:

算法逆向源码(python):

calc_table=[0x19791126,0x19791007,0x11261979,0x10071979,\
0x12345678,0x9abcdef0,0x12123434,0x78787878,\
0xccc6ccc6,0xcc00cc00,0xffefefff,0xddcc5555,\
0x67678787,0xcececbcc,0x778899ab,0x44337766]
 
def calc_name(name):
sum_name=0
for i  in range(0,len(name)):
sum_name=sum_name+i*ord(name[i])
#print hex(sum_name)
calc_name1=(sum_name&0xFFFF)+((((2*len(name)+0×63)&0xFFFF)<<0×10))
#print hex(calc_name1)
calc_name2=calc_name1&0xF
return calc_name2
def calc_pass(password):
str_pass='0'+password
edx=0
for i in range(0,len(str_pass)):
edx=edx*2
edx=edx+edx*4
edx=edx+ord(str_pass[i])-0×30
return edx
name_in = raw_input(&quot;Input your name:&quot;)
pass_in=raw_input(&quot;Input your pass:&quot;)
print hex(calc_table[calc_name(name_in)])
print hex(calc_pass(pass_in))

2. 解方程算法逆向

预计时间:4h

本程序虽然叫解方程算法,但是解方程算法只是本程序算法中的一小部分。


2.1. 定位关键算法

运行程序,随便输入name和serial,点击check没有

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值