首页 > 其他分享 >学习crack-day02

学习crack-day02

时间:2023-02-14 14:03:18浏览次数:48  
标签:day02 寄存器 edi 学习 crack 跳转 字符串 ptr ecx

简单的注册机练习

分析:

解析之前先查壳,再运行做好分析。image-20221019214614034.png

这是一个无壳的三十二位的程序,之后我们再运行一下看有没有什么提示性字符。由于程序是用很老的VB 5.0编写的,所以没有相应的动态连接库,需要自己下载,放到SysWOW64里面。

image-20221019215103737.png这里有个失败提示,所以在放入OD之后可以直接对字符串进行检索,查看有没有这个失败信息字符串,然后定位到程序位置并开始分析。

OD-解析:

首先根据之前的报错信息去尝试查看是否能检索出错误字符串,这样好锁定到它的位置。image-20221019215441066.png这个是有的,然后我们还能看到旁边还有其他的提示信息,有一个比较像successful的提示信息,应该是成功提示,但是咱也不能无凭无据乱说,所以还是通过错误信息跳转到程序执行处。image-20221019215750272.png可以看到这个错误提示的前面有一个跳转,可以猜测这个跳转就是判断跳转,要破解的话我们也只需要对这个跳转来个84、85的转换,或者74、75的转换。所以跟着跳转去查看分析。image-20221019220047910.png果然这里有个je跳转,然后前一句就是cmp判断,而且我们发现,就在这个跳转的下方有个成功的提示信息,所以我们大致可以肯定爆破方法就是修改je。image-20221019220328205.png尝试运行一下,image-20221019220453616.png这时我们就已经成功爆破了这个程序,非常简单。但是我们还需要了解一下它的一个运行过程。

算法分析:

我们继续从成功提示的位置往前翻看,我们能看见一处字符串比较image-20221019220827814.png这里有一个strcmp字符串比较,在调用这个函数之前它push了两个参数,一个是ecx另一个是一个字符串SynTaX 2oo1那么就可能这个字符串就是注册码,(简单的会直接给,复杂的会对一个简单字符串进行各种操作,不会用直接显示的字符串)那么ecx就是通过寄存器将我们输入的字符串传参给函数strcmp,为了进一步的证实我们的猜想,我们在比较函数执行前下一个断点,然后开始运行。

image-20221019221736284.png输入一个123456,确定。image-20221019221823804.png可以看到ecx寄存器中存放的就是我们输入的123456,这就代表我们的猜测是对的。所以SynTaX 2oo1就是注册码,如果这里的比较函数是一个人为手写,那可能就带有字符串操作。

接着往下看看

mov edi,eax											//这里将比较后的结果给到edi中

image-20221019222606316.png这里可以看到寄存器eax中是全1,这代表两个字符串不相同。

lea ecx,dword ptr ss:[ebp-0x28]					//将输入字符串所在栈上的位置给ecx
neg edi											//neg取补指令,对edi取补
sbb edi,edi										//sbb借位减法,会从cf标志寄存器上借位
inc edi											//inc加1
neg edi
call dword ptr ds:[<&MSVBVM50.__vbaFreeStr>]     
lea ecx,dword ptr ss:[ebp-0x2C]
call dword ptr ds:[<&MSVBVM50.__vbaFreeObj>]     
cmp di,si

image-20221019223317377.pngimage-20221019223345132.pngimage-20221019223404773.pngimage-20221019223437095.pngimage-20221019223656416.png之后就是开始清理空间了。比较是di和si一样全零,会跳转。所以这里改一下di和si的值也是可以的,esi寄存器在之前是通过异或专门清零了的。

image-20221019224045290.png

标签:day02,寄存器,edi,学习,crack,跳转,字符串,ptr,ecx
From: https://blog.51cto.com/u_15954070/6056748

相关文章

  • 三角函数学习笔记
    不会三角函数/ng基础定义锐角定义定义:直角所对的边称作斜边,角\(\theta\)所对的边称为对边,剩下的那条边(和\(\theta\)相邻)称为邻边。则\[\begin{aligned}\sin(\t......
  • JAVA-studyDay02
    java-day02一.注释//书写注释是非常好的习惯//单行注释////多行注释/**///JavaDoc:文档注释/***///平时写代码一定要注意规范注意:注释不会影响代码二.运算符1.......
  • Rust学习笔记
    CargoCargo是Rust的构建系统和包管理器。因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库查看版本号cargo--versionrustc--version#查看ru......
  • 关于我在学习LFU的时候,在开源项目捡了个漏这件事。
    你好呀,我是歪歪。这篇文章带大家盘一下LFU这个玩意。为什么突然想起聊聊这个东西呢,因为前段时间有个读者给我扔过来一个链接:我一看,好家伙,这不是我亲爱的老朋友,Dubbo......
  • SSH学习笔记
    SSH概要SecureShell,安全外壳协议,简称ssh,是一种建立在应用层基础上的安全协议,通过对密码进行加密传输验证,可在不安全的网络中对网络服务提供安全的传输环境,实现ssh客户端......
  • 联邦学习论文阅读笔记08 A Survey of Incentive Mechanism Design for Federated Lear
        问题:现有联邦学习研究集中在提高模型精度和完成时间-------准确率与效率,即又快又好。然而实际中客户不愿意投入到无回报的FL中。    1前言:机器学习的......
  • 项目学习1
    如何创建go项目在src目录下创建项目名称,如src/github.com/xylx/goblog;如果不准备上传至代码托管平台站点,则可以直接创建项目名,如:src/goblog如何使用VSCode的内置......
  • 送你一份2023Java学习路线,按图索骥,开启一路狂飙!
    新年正月进入尾声,二月的脚步已经临近。该学习的学习、该努力的努力,改立的目标还是要立,送你一份2023Java学习路线,按图索骥,开启一路狂飙。No.1 初探Java/JavaSE基础技术入......
  • IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
    本文作者:丁同舟,来自金蝶随手记技术团队。1、引言接上篇《金蝶随手记团队的Protobuf应用实践(原理篇)》,本文将以iOS端的Objective-C代码为例,图文并茂地向您菔救绾卧趇OS......
  • 2023年2月14日学习Linux
    关闭Linux系统的命令:init02)Linux终端:Linux终端也称为虚拟控制台。Linux终端采用字符命令行方式工作,用户通过键盘输入命令,通过Linux终端对系统进行控制。3)切换虚拟终端......