160个crackme(3)----Afkayas2

3Afkayas★★Nag,Name/Serial(VB5)
这个跟上次那个也是VB编写的,这里转载两篇篇关于VB程序逆向反汇编的博文

VB程序逆向反汇编常见的函数http://www.cnblogs.com/bbdxf/p/3780187.html

VB程序逆向反汇编常见的函数(下断用)http://blog.sina.com.cn/s/blog_80deaf0c0102vnxr.html


查壳无壳


程序的nag,说实话,挺丑的



1.去nag

刚才提到这个crackme是VB写的,破解这个nag我想了挺久的,后来在吾爱破解找到了资源,有教程已经总结了如何破解VB程序的nag窗口,链接: https://pa   n.baidu.com/s/1mkqYZt2 密码: q9e7


在窗口定位到入口处push的地址,可以看到字符串VB5,应该是VB5写的



教程用到的方法叫4C法,重新定位到004067D4+4C,可以看到一个地址,再重新定位到新的地址00406868



可以看到有两块数据很像,根据教程将黄色圈的数字交换一下,在保存数据,打开保存的exe没有弹出nag窗口了,根据教程的说法是将主程序和nag窗口弹出的顺讯交换了,所以先显示主程序,而一关闭主程序,应用程序就退出了,nag窗口根本没机会显示


(有时间我会自己尝试一下破解nag窗口)



2.name/serial

name/serial的破解方法和Afkayas1很像,我这里就不赘述了,稍微提一下不同的地方。首先是尝试输入name和serial时,发现使用默认值会弹出不一样的报错窗口


尝试其他的输入发现,serial只能输入数字和部分字符,所以只要把serial改成数字就可以用Afkayas1的破解手法来做了,这里附上链接http://blog.csdn.net/abc_670/article/details/79221079




下面说下不一样的地方,乘以的数字不一样了



这个跟Afkayas1不一样的地方就是多了浮点运算,我还是第一次接触浮点运算指令,如果解释不当的地方还请见谅,转载一篇讲浮点指令的博客,不懂的可以看他的,汇编语言浮点数指令集http://blog.csdn.net/whatday/article/details/7219014


下面这个是进行第二次计算的过程,


里面还涉及到标志寄存器,FSTSW ax,将状态寄存器赋值给ax。状态寄存器是只读的,因此与它有关的指令只有一条(但有同步和不同步两个版本,参见8.3节),即FSTSW。这条指令将状态寄存器中的内容传送至AX寄存器,位次序不变。由于状态寄存器共16位,因此正好填满AX。通过检测AX的对应位,即可得到状态控制器的相关信息

test eax, 100b;          b后缀意为二进制
jnz  ******;             如果eax右数第三个位为1,jnz将会跳转
jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1.


下面是第三次计算的过程,



第四次计算过程,


到这里,注册算法已经知道了,写的注册机如下:

#include <iostream>

using namespace std;

int main()
{
    cout<< "please input your name:";
    string name;
    getline(cin,name);
    int x = name.length() * 0x15B38 + name[0];
    float num[20];
    int i=0;
    while(x != 0)
    {
        num[i] = x%10;
        x /= 10;
        i++;
    }
    int m = i-1;
    int Num = 0;
    for(i = m; i >= 0; i--)
    {
        Num = Num * 10 + num[i];
    }


    Num = (Num + 2) * 3 - 2 + 15;
    cout << "serial:" << Num << endl;

    return 0;
}

破解成功!!!!


再看一下它的验证算法,也是用了浮点数运算,用我们输入的serial除以正确的serial,如果比值为1,则表示serial是正确的,紧跟着就是条件跳转,通过改变esi的值来做一个桥梁,让后面可以通过esi的值来选择是正确还是错误,这个比较隐蔽,跟上次那个一样!也可以利用这一点爆破




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值