160 - 38 CyberBlade.2

环境
Windows xp sp3

工具
1.VBExplorer
2.ollydbg

查壳
OD载入往上翻可以看出是vb程序,看到

00401042   .- FF25 60104100 jmp dword ptr ds:[<&MSVBVM50.MethCallEngine>]              ;  MSVBVM50.MethCallEngine

可以知道是p-code的了
测试

OD载入后搜字符串是搜不到的东西了。
参考
《使用OllyDbg从零开始Cracking》第29和30章关于p-code的内容之后就可以分析出来了。

0040E393前面的是一些对输入内容长度格式等判断
0040E393 循环开始
0040E3A6 读入name
0040E3B8 name入栈
0040E3BB 将name从str变成variant类型
0040E3BE 这个是指向上面的variant的指针
0040E3C1 这是取第一个字符函数
0040E3C6 将上面的函数计算出的结果进栈
0040E3C9
0040E3CD 将刚刚进栈的字符转成数值
0040E3D2 将刚刚得到的数值保存起来
0040E3D5 将得到的数值转成10进制然后再转为字符串
0040E3D9 将得到的字符串转回variant
0040E3EF 跳回去0040E393

0040E3F5 这里是将上面循环得到的字符串入栈
0040E3F8 得到上面入栈字符串的长度
0040E4020x9比较
0040E404 相等就跳到40E425
0040E407 将上面循环得到的字符串入栈
0040E40A push了一个圆周率
0040E416 字符串转为数值除以3.141592654
0040E41A 将结果入栈
0040E422  jmp 0040E3F5

0040E425 将上面的结果取整入栈
0040E430 将栈中的值转为16进制后再与0x30F85678进行异或运算
0040E434
0040E438 将上面的计算结果入栈
0040E43E 
0040E4410xD8B3入栈
0040E4450040E438处入栈的值减去0xD8B3,并将结果入栈
0040E449 
0040E44D 
0040E452 
0040E455 

0040E45A  开始for循环 
0040E460  
0040E463
0040E464  
0040E46D  读取serial
0040E472  serial入栈
0040E475
0040E478
0040E47A
0040E47D
0040E480  这里push了一个值
0040E481  和输入的serial比较是否相同
0040E483
0040E486
0040E489  相同则跳到0040E48C
0040E48C 
0040E48F  跳回循环

0040E4A2 读入serial
0040E4A7
0040E4AA 将字符串转为variant
0040E4AD 将上面的计算的值存了进来
0040E4B0 用字符串的字面值减去上面计算的值
0040E4B4 
0040E4B7 
0040E4C1 读入name
0040E4C6 
0040E4C9 计算name长度
0040E4CF 判断是否相等,不相等就为0
0040E4DE 如果上面判断结果为0就跳到错误消息框,

还是和Native-code代码一样,在分析算法中还是存在许多东西可以跳过的。
指令的位置可以用VBExplorer反编译出来。
然后用OD动态调试观察执行细节就行了

总结起来就是:
将name中每一个字符转成ascii值。
如:abcdefg
变成:979899100101102103

再判断这个值长度是否大于0x9
如果是就除以3.141592654
重复直到长度不大于0x9
于是就有:351021547

再将结果与0x30F85678异或
变成:605323155

减去0xD8B3,
变成:605267680

最后加上name的长度7:
变成:605267687

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值