当前位置: 首页 > news >正文

逆向入门(42)程序逆向篇-riijj_cm_20041121

0x00 初试

一打开就带有一个dll
在这里插入图片描述
直接全部解压运行,发现点击也没有什么窗口提示,看了下也没壳,直接进调试器吧
在这里插入图片描述
在调试器中发现程序会直接结束程序运行
在这里插入图片描述
设置了忽略异常还是会存在这个问题,搞不好了,用了其他的办法,比如说用od的插件strongOD的设置也不行,但是查找一些资料的时候发现他们可以,原因未知,这个题真的是新人噩梦啊,不查资料根本没法做,于找了两篇资料来学习,也是看了很久,学到了。学习资料1、学习资料2

0x01 exe1

这里是有反调试器技术,嗯,原来游戏碰到都是通过其他人解决的,第一次自己动手处理,由于没有解决dbg这个异常处理的问题,于是又用OD来进行尝试,这里先关掉strongOD里面的忽略异常
在这里插入图片描述
接着重新加载一下文件,按F9报错了
在这里插入图片描述
此时按shift+f9,虽然可以直接跳过这个异常,但是也会存在问题,左下提示调试器出错了,再按一次就退出了
在这里插入图片描述
所以再重新加载一次,用f8步进吧,步进到这个地方的时候又异常了
在这里插入图片描述
给这里下个断,重新加载一次,然后断下来后,进入这个函数
在这里插入图片描述
一直步进,找到了异常的原因,jmp到了一个空地址
在这里插入图片描述
其实在没有查资料的时候自己也找到这里来了,但是到这了就不知道应该怎么办了,想直接jmp也不知道跳到哪,于是只能按资料里面的信息去查了上面一段代码中的SEH
在这里插入图片描述
AI给的一段解释
在这里插入图片描述
根据资料的一些信息,这里SEH会成为反调试技术还是因为利用了调试器不支持的一些技术原因,进入0x4024D0SEH函数打下断点,取消之前的断点,重新再次加载
在这里插入图片描述
shift+f9,第一次进入到这个SEH中,按F8步进
在这里插入图片描述
到这个地址会再次报错异常,给这个地址打下断点,继续shift+f9,观查寄存器的值
在这里插入图片描述
这里的ecx会一直变化,指向到不同的函数,到这里的直接就按一下f7,跟进去看看,持续到第5次出现异常时进入到了新函数
在这里插入图片描述
不过回来以后还是异常了,接着跟
在这里插入图片描述
ECX到了0x12的时候,又进入到了新函数,也是卸载这个SEH函数的地址,程序也停在这了,再来一次就中断了,所以就处理完这个卸载函数时,让他jmp到之前程序处理异常的那个地址应该就可以了,也就是上图中的401940函数,重新加载以后, 再次来到上图的位置,这次将401cf2处的汇编改为jmp 0x00401940打个补丁就可以
在这里插入图片描述

0x02 exe2

重新加载得到的新的exe,但是仍然会退出程序,但是和上次不一样,在寄存器处有明显的提示
在这里插入图片描述
这个isDebuggerPresent是官方用来检查测试器的一个函数,通过使用插件对刚刚的api函数进行断点设置
在这里插入图片描述
这次在这里又出现了异常
在这里插入图片描述
je直接改jmp强制跳转,然后再patch一个新exe

0x03 exe3

再次运行后终于出现了窗口,但是这个窗口仍然卡在这个界面
在这里插入图片描述
再按两次shift+f9就退出进程了,真是服啦,咋这难,接着学!
在这里插入图片描述
回到这个call,下个断点,断下来的时候进入看看
在这里插入图片描述
发现这里一直在读进程相关信息,继续追一下,进入到401640这里发现一直在遍历dll文件
在这里插入图片描述
往下还看到了一个配置文件ollydbg.ini
在这里插入图片描述
读取某配置文件进行判断是否开了调试器吗,试了下x32dbg,果然正常
在这里插入图片描述
服了,回到OD再追一下
在这里插入图片描述
这里打个断点,一直在循环读取各种路径下的ollybdg.ini,看看不跳的时候是不是会退出就知道了
在这里插入图片描述
多追了一下,突然就不跳了,奇怪的是我好像也没这个路径,不过不管了,直接将这里的je改为jmp以后再存一个exe4,终于是不检测了,我的天,这明显是地狱难度啊
在这里插入图片描述

0x04 exe4写注册机

由于这个程序点击没有反应,所以使用GetWindowTextA来进行下断点,但是没有断下来,后来想了一下,加载了dll程序的,可能是搜索范围不对,于是点击E,然后双击进入pdf1.dll
在这里插入图片描述
再次进行搜索,获得关键字
在这里插入图片描述
往上翻了下,就可以正常下断点了
在这里插入图片描述
找到计算算法如下
在这里插入图片描述
可以写出注册机,总算有个简单的内容了

#include <iostream>int main() {const char* checkStr = "fytugjhkuijonlbpvqmcnxbvzdaeqrwtryetdgfkgphonuivmdbxfanqydexzwztqnkcfkvcpvlbmhotyiufdkdnjxuzyqhfstae";char username[256] = { 0 };char serial[256] = { 0 };printf("用户名: ");std::cin.getline(username, 256);int nameLen = strlen(username);for (int i = 0; i < nameLen; i++){unsigned char temp = username[i] % 98;serial[i * 2] = checkStr[temp];serial[i * 2 + 1] = checkStr[temp + 1];}printf("serial: %s", serial);return 0;
}

在这里插入图片描述
搞定
在这里插入图片描述
真是难得没边了都,太不友好了!

http://www.dtcms.com/a/301523.html

相关文章:

  • 生态环境大数据技术专业的深度解析
  • 物理实验仿真平台设计与实现(抛体运动与电磁场交互)
  • 构建可扩展的状态系统:基于 ArkTS 的模块化状态管理设计与实现
  • MPI环形AllReduce算法实现与深度解析
  • lombok插件@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor的区别
  • RS485 半双工系统中 DE 控制端默认 0 的技术原理与工程实践
  • (实用教程)Linux操作系统(二)
  • 零基础 “入坑” Java--- 十五、字符串String
  • 【I】题目解析
  • Spring MVC设计精粹:源码级架构解析与实践指南
  • 发布 VS Code 扩展的流程:以颜色主题为例
  • Python学习-----1.认识Python
  • 墨者:X-Forwarded-For注入漏洞实战
  • 解决ubantu系统下matplotlib中文乱码问题
  • MySQL进阶学习与初阶复习第四天
  • 数据库连接操作详解:左连接、右连接、全连接与内连接
  • ABP VNext + Elastic APM:微服务性能监控
  • 【优选算法】BFS解决最短路问题(单源)
  • 初始Redis:概念、特性、使用场景、安装教程
  • 六、搭建springCloudAlibaba2021.1版本分布式微服务-admin监控中心
  • IPv6的多级地址层次的理解
  • 设计模式(五)创建型:原型模式详解
  • 【ELasticsearch】节点角色分离最佳实践
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)
  • 剑指offer第2版:双指针+排序+分治+滑动窗口
  • Web开发系列-第0章 Web介绍
  • 面试题:Vue2 中 template 的解析过程详解
  • CentOS 镜像源配置与 EOL 后的应对策略
  • 修改docker容器内的时区为东八区
  • 字符串是数据结构还是数据类型?