图文记录

一.观察程序特点和运行逻辑

  • 带弹窗

  • 是VB开发的

  • 需要用户名和注册码

  • 有弹框

具备了很简单的特点……

错误弹框,如图

二.定位

弹窗内容入手,搜索关键字定位到关键跳,nop掉或者je改jne就可以实现,即怎么输入都是正确,但不是我们的重点,直接略过

三、研究算法

1.找块入口

从关键跳【0040258B】开始往上浏览,找到push ebp ,上面又是retn的地方(这个找多了下下断试试就有经验了),即【00402310】下断点,运行程序,输入用户名''123456",伪码"654321",程序如期断在断点处

2.F8步过分析反汇编代码

F8步过,关注寄存器,堆栈,注释等的变化,找到敏感函数和信息,这里找到了取字串输入内容的相关函数

004023B6   call dword ptr ds:[eax+0xA0]             ;  msvbvm50.7407A5B6

F8步过这个call后堆栈变化为输入的用户名"123456"

做个标签,这里需要注意的是:对于VB的反汇编,ollydbg就会出现丢失标签的情况,所以比较操蛋,敏感的入口地址自己还是记录一下,否则重载一次标签就没了,但是注释不丢,可以注释,但是毕竟没标签类似于重命名函数来的方便、直观!

继续F8继续走

3.发现算法

再继续F8发现算法部分,算法是:输入用户名长度*0x17cfb+用户名第一个字符ascii码,再转换10进制,再转字符串

如下图

这里深挖一下jo溢出跳转,增强一下基本功

  • imul是有符号乘法(即要考虑正负号)

  • edi是32位寄存器,即最大取址范围是FFFFFFFFF,考虑到符号,则正数是0-7FFFFFFF,负数是80000000-FFFFFFFF

  • 换成十进制就是正数0到20亿多一些,负数是从-1到负20亿左右

  • 我们输入的字符串长度取值乘以常量0x17CFB,所以只用考虑正数即可

  • 自己算一下字符串长度上限应该是多少呢?

  • 答案是0x5602也就是十进制的22018

  • 也就是说你的用户名最长是22018位,再多程序就崩了个球了

  • 有兴趣的可以自己写个Fuzzer来测试一下是不是,当然下断后修改寄存器数值也可以达到效果

  • 题外话,这也是为什么早期的xp系统下的网络游戏端游游戏玩家经验值总是被限制到20亿,再多对于早期的开发就很烦了,当然我妄测一下,这也是早期出现游戏角色转生的技术诱因之一

回到正题,最后拼接”AKA-“给计算好的字符串组成完整激活码,来给输入的激活码比较,最后根据比较结果弹框。

 三、写getkey

既然知道了算法开始写注册机,由于XP也想兼容的原因,就用“千年老妖” vc6来写吧,因为笔者vs2017出的程序xp死活是不行的(2015通过xp支持还是可以的,2017似乎全世界已经没人想管他到底xp是否可以搞了),废话不多说核心代码如下图

 void CCM002Dlg::OnOK()
{
// TODO: Add extra validation here //CDialog::OnOK(); char szName[]={};
int nKey = ;
char szkey [] = {};
GetDlgItemText(IDC_EDIT1,szName,);
if (strlen(szName)>)
{
nKey = strlen(szName) * 0x17CFB + szName[];
sprintf(szkey,"AKA-%d",nKey);
SetDlgItemText(IDC_EDIT2,szkey);
}
else
{
const char * szTitle="逆向驿站提示您";
const char * szText="用户名不能为空!";
MessageBoxA(szText,szTitle);
} }

一次VB汇编中看-溢出计算的更多相关文章

  1. 一起talk C栗子吧(第三十四回:C语言实例--巧用溢出计算最值)

    各位看官们.大家好,上一回中咱们说的是巧用移位的样例,这一回咱们说的样例是:巧用溢出计算最值. 闲话休提,言归正转.让我们一起talk C栗子吧! 大家都知道,程序中的变量都有一个取值范围,这个范围也 ...

  2. GNU ARM 汇编基础

    ARM GNU汇编基础 0 前言 全文补充提醒: 笔者在阅读ARM官方文档及查阅实际的u-boot源码中的汇编代码后,发现了一些不同于ARM官方文档中的汇编语法,查阅相关资料后,才发现主要由于汇编器的 ...

  3. 用Regex类计算一个字符串出现次数是最好方法【转载】

    我的一个朋友问我,怎么在c#或vb.net中,计算一个字符串中查找另一个字符串中出现的次数,他说在网上打了好多方法,我看了一下,有的是用replace的方法去实现,这种方法不是太好,占资源太大了.其实 ...

  4. Moran’s I空间统计中出现内存溢出的问题

    在经济学.资源管理.生物地理学.政治地理学和人口统计等领域,经常会有如下的研究需求: 研究区域中的富裕区和贫困区之间的最清晰边界在哪里? 研究区域中存在可以找到异常消费模式的位置吗? 研究区域中意想不 ...

  5. 程序员之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)

    主要内容:无符号和有符号之间转换.两数相加溢出后数值计算 #include <stdio.h> /* 这个函数存在潜在漏洞 */ float sum_elements(float a[], ...

  6. C中整数的溢出

    /** * 整数的溢出 */ #include <stdio.h> int main(int argc, char *argv[]) { short i = -24; // 将-24以无符 ...

  7. Python入门的三大问题和三大谎言

    Python广告,铺天盖地,小白们雾里看花,Python无限美好.作为会20几种语言(BASIC Foxbase/pro VB VC C C++ c# js typescript HTML Ardui ...

  8. 操作系统学习笔记5 | 用户级线程 && 内核级线程

    在上一部分中,我们了解到操作系统实现多进程图像需要组织.切换.考虑进程之间的影响,组织就是用PCB的队列实现,用到了一些简单的数据结构知识.而本部分重点就是进程之间的切换. 参考资料: 课程:哈工大操 ...

  9. 【一月一本技术书】-【Go语言设计与实现】- 9月

    Go : 2009.11.10 代表作:Docker.k8s.etcd 模仿C语言,目标:互联网的C语言 讲的晦涩难懂....硬板..放弃了好几次才读完.满分10分,打6分. 下个月:Python数据 ...

随机推荐

  1. 转:.NET 面试题汇总(一)

    目录 本次给大家介绍的是我收集以及自己个人保存一些.NET面试题 简介 1.C# 值类型和引用类型的区别 2.如何使得一个类型可以在foreach 语句中使用 3.sealed修饰的类有什么特点 4. ...

  2. Linux 下Shell的学习3-service编程

    1. vim /etc/init.d/nginx 2. chmod 755 /etc/init.d/nginx 3. service nginx status #!/bin/bash # nginx ...

  3. mariadb启动报错:[ERROR] Can't start server : Bind on unix socket: Permission denied

    今天mariadb总是启动不了,对于我来说是不能忍受的.然后前往日志文件查看报错信息,提示如下: 出错信息一共就这三行,没有报其他的错误.那只能从红色方框的地方开始入手了. 首先是百度去搜索原因是什么 ...

  4. digital ocean 内存不足时增加swap文件的方法

    买了比较低配的digitalocean 云主机,在执行composer update的时候出现内存不足的问题,但是内存大小已经固定了,除非加钱,还有别的方法吗? 有,增加swap分区,这样就可以弥补内 ...

  5. Sqlserver数据库还原一直显示“正在还原…”解决方法

    --恢复并且回到可访问状态,要执行 RESTORE database 数据库名  with recovery

  6. tcp付金卡黛珊李方军拉萨

    进口量点卷啊首付款拉德斯基疯狂拉萨的

  7. RMAN 备份数据库到DISK后进行数据恢复

    RMAN 备份数据库到DISK,然后进行数据恢复 一.rman备份 1. 全备脚本 vi bakup_level0.sql connect target / run { allocate channe ...

  8. [CQOI2009]叶子的染色

    传送门:https://www.luogu.org/problemnew/show/P3155 一道挺水的树形dp题,然后我因为一个挺智障的问题debug了一晚上…… 嗯……首先想,如果一个点的颜色和 ...

  9. Android 关于在ScrollView中加上一个ListView,ListView内容显示不完全(总是显示第一项)的问题的两种简单的解决方案

    是这样的哈: 有这样一个需求: 1.显示一个界面,界面上有一个列表(ListView),列表上面有一个可以滚动的海报. 2.要求在ListView滚动的过程中,ListView上面的海报也可以跟着Li ...

  10. APP快速搭建框架

    AppDelegate: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDicti ...