DES逆向分析

DES逆向分析

DES逆向分析_第1张图片
在第一部分三次使用call调用函数,第一次是puts输出“give me a string to encrypt”,通过运行exe也可以发现,程序首先会输出“give me a string to encrypt”。
DES逆向分析_第2张图片

第二次是调用scanf函数,进行一段输入保存在位置为Str的栈空间里。
第三次是调用strlen函数,计算输入字符串的长度,保存在eax里。

之后拿eax的值和8进行比较,也就是比较8和字符串的长度,如果不相等的话则跳转到红线部分,查看红色部分。
DES逆向分析_第3张图片
表示程序直接结束,通过运行exe文件,符合事实。
DES逆向分析_第4张图片
如果字符串的长度恰好等于8,则跳转到绿色部分,查看绿色箭头指引的部分。
DES逆向分析_第5张图片
首先把栈起始地址为Var_C部分的转移给edx,随后把edx压入栈,调用get_subkey函数,通过观察可以大致猜测get_subkey函数为生成密钥函数。点击Var_C可以看到初始时,Var_C为“DE3_En1C”
在这里插入图片描述
然后在把站起始地址为Var_28部分的内容转移给eax,把Str(即输入的字符串)转移给ecx,把eax,ecx压入栈,调用encyption函数,通过观察也可以大致猜测encryption函数为加密函数。点击Var_28可以看到其大小为28h,即40比特
在这里插入图片描述
然后把var_2C初始化为0,无条件跳转到下一部分。
DES逆向分析_第6张图片
Loc_40114B函数是比较var_2C和8,当var_2C大于等于8时跳转到绿色箭头部分。
DES逆向分析_第7张图片
绿色箭头部分输出“Good Job!!”,表示输入正确,程序结束。
但是刚开始时var_2C被初始化为0,肯定小于8,则跳转到红色箭头部分。
DES逆向分析_第8张图片
第一方框中比较重要的函数为cmp,比较ecx和eax。其中点击eax可以看到其来源,它是由result数组的第edx位转移给eax的低8位。点击edx可以看到,它是由var_2C赋值而来,即可以把var_2C理解为i。其中ecx是由栈起始地址位var_28,偏移量为eax赋值而来的,查看eax是由var_2C赋值来的,即把var_28的第i位赋值给ecx,把result的第i位赋值给eax,然后比较两者,如果相等则跳转绿色箭头,否则跳转红色箭头。
跳转红色箭头则输出“Wrong!!”,表示输入错误,程序结束
若相等则跳转到loc_401188,然后无条件跳转到下面一部分。
DES逆向分析_第9张图片
这一部分时i值的自加,即i++。然后跳转到i和8比较的部分,总共循环8次。
通过对主函数的分析大致理解程序思路,即加密输入的程序段,然后和result中的数组比较,若有任何一位不相等则输出“Wrong!!”,直至比较到最后一位,若一直相等,则最后输出“Good Job!!”。

这个只是分析的主函数,后面会将整个分析过程上传,作为初学者,会有理解不到位的地方,还请包涵。

你可能感兴趣的:(加密解密,信息安全,算法)