jmp

逆向-逻辑流控制

假如想象 提交于 2019-12-03 14:05:38
逻辑流控制 在我的抽象中执行逻辑有三种-顺序、选择、循环。默认汇编就是从上到下顺序执行,选择用if-else和switch,循环用while、for等。 分支语句 if-else int main(int argc, char const *argv[]) { int a=10; if (a>10){ printf("a>10"); }else{ printf("a<=10"); } return 0; int main(int argc, char const *argv[]) { int a=10; if (a>10){ printf("a>10"); }else if(a<2){ printf("a<2"); }else{ printf("2<=a<=10"); } return 0; } 从上面两个二分支和三分支可以看出: 开始标志就是cmp,jcc 这两条标志语句,代表条件判断。 直接跳转的jmp代表执行的是它上面的分支。 每个分支内jmp跳的地址是一样的都是else{};这条语句之后的位置。 巧妙的运用了顺序结构 switch int main(int argc, char const *argv[]) { int a=11; switch (a) { case 10: printf("a=10"); break; case 11: printf("a=11");

Assembler jump in Protected Mode with GDT

匿名 (未验证) 提交于 2019-12-03 02:06:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am currently playing around with x86 Assember in order to sharpen my low-level programming skills. Currently, I am facing a little problem with the addressing scheme in 32-Bit Protected Mode. The situation is the following: I have a Program loaded at 0x7e0 which switches the CPU to Protected Mode and jumps to the according label in the code: [...] code to switch CPU in Protected Mode [...] jmp ProtectedMode [...] bits 32 ProtectedMode: .halt: hlt jmp .halt This works absolutely fine so far. The "jmp ProtectedMode" works without a explicit

[CrackMe]160个CrackMe之001

自古美人都是妖i 提交于 2019-12-01 17:29:24
吾爱破解专题汇总: 【反汇编练习】160个CrackME索引目录1~160建议收藏备用 一、 Serial/Name 之 暴力破解 1. 熟悉界面:很常规的一个界面,输入完账号密码之后会进行验证。 2. ollbdg调试 - 如何下第一个断点   1)问题1:因为这不像编程,编程时这里会存在一个main函数入口,但这个根本没有,所以如何下第一个程序断点来分析就非常重要。     答案:利用函数调用栈来找到 调用MessageBoxA的地址 .这时肯定存在栈顺序,xxa->xxb->MessageBox->kernel32.dll!xx->xx,我们通过MessageBox作为一个浮标来确定好其他位置。   2)问题2:但这里又存在另外一个问题,我们如何确定代码执行的位置(exe),是xxa、xxb还是xxc呢?     答案:通过模块调用查看exe的起始地址,若在xxa、xxb、xxc中存在一个与之相近的值,则说明该call就是调用的。   3)分析流程:     1>在显示"sorry,The serial is incorect"窗口暂停,在olldbg中点击 "K" 按钮,查看函数call的顺序。            很遗憾,并没有找到我们所期待的MessagBox函数,但别灰心,我们利用栈再继续分析。     2>如图,栈拓展顺序由高向低,我们找栈内部的应该向下找

C++反汇编: 基础知识(7)

岁酱吖の 提交于 2019-11-29 19:16:17
title: 'C++反汇编: 基础知识(7)' date: 2019-09-07 12:18:41 tags: 汇编与反汇编 categories: 汇编与反汇编 copyright: true --- 反汇编(Disassembly),即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域,学习和理解反汇编语言对软件调试、漏洞分析、内核原理及理解高级语言代码都有相当大的帮助,软件一切神秘的运行机制全在反汇编代码里面,该笔记整理了C++反汇编的一些常识. 变量与常量 数值类型变量: 整数,浮点数,等类型其反汇编结果基本相同. int main(int argc, char* argv[]) { int x = 10; int y = 20; int z = 0; z = x + y; return 0; } 反汇编结果如下,首先lea取地址,然后ECX=13,这里的13是因为我们有3个整数型变量,每个变量占用4个字节,所以4x3=12次,将EAX设置为CCCCCCC,并通过rep指令填充内存地址从[edi]指向的位置开始填充,填充14次,同样的也初始化了堆栈,接着通过mov赋值语句将内存地址分别初始化为指定的数值. 0040D709 |. 8D7D B4 lea edi, dword ptr [ebp-4C] 0040D70C

缓冲区溢出实例(一)--Windows

不羁的心 提交于 2019-11-28 06:16:38
一、基本概念 缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等。 在Windows XP或2k3 server中的SLMail 5.5.0 Mail Server程序的POP3 PASS命令存在缓冲区溢出漏洞,无需身份验证实现远程代码执行。 注意,Win7以上系统的防范机制可有效防止该缓冲区漏洞的利用: DEP:阻止代码从数据页被执行; ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化。 二、实验环境准备: SLMail 5.5.0 Mail Server ImmunityDebugger_1_85_setup.exe mona.py 下载地址: https://slmail.software.informer.com/download/ https://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/Immunity-Debugger.shtml https://github.com/corelan/mona mona手册 https://www.corelan.be/index.php/2011/07/14/mona-py-the

2019年9月4日11:19:25

╄→尐↘猪︶ㄣ 提交于 2019-11-27 19:45:00
1.for(;;)和while(true)的区别 编译前 编译后 while (1); mov eax,1 test eax,eax je foo+23h jmp foo+18h 编译前 编译后 for (;;); jmp foo+23h    来源: http://www.cnblogs.com/chendeqiang/p/11457916.html

64位下的InlineHook

妖精的绣舞 提交于 2019-11-26 23:06:54
目录 x64下手工HOOK的方法 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄存器 + 15字节方法 2.远跳 影响寄存器 + 12字节方法 3.影响寄存器,恢复寄存器 进行跳转. 4. 常用 jmp + rip方式跳转 大小6个字节 二丶Call的几种方式. 1. CALL PUSH + RET 方式 2.正常call x64下手工HOOK的方法 关于64位程序.网上HOOK方法一大堆.这里也记录一下. 了解跨平台HOOK的真相与本质. 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄存器 + 15字节方法 在64位下 HOOK有几种方法. 一种是影响寄存器的值.另一种是不影响寄存器的值.各有优劣. 第一种: 不影响寄存器的值 硬编码占用大小为15个字节. 原理: 利用push + ret的原理. 让HOOK的位置跳转为我们的地址. push 函数低地址(8个字节) mov qword ptr ss:[rsp + 4],函数高地址(8个字节,不过高4个字节一般都是0所以可以不用给) ret 硬编码: 68 XX XX XX XX push LowAddress 48 C7 44 24 04 XX XX XX XX mov qword ptr ss:[rsp + 4],HighAddress C3 ret 其中XX的地方可以换成我们的地址. 2.远跳 影响寄存器 +

Juniper JunOS Space Upgrade Procedures from 14.1 to 16.1

北城以北 提交于 2019-11-26 16:20:52
Usually you can easily upgrade an application from the Junos Space user interface. You must download the image file for the new version of the application, navigate to the Applications page (Network Management Platform > Administration > Applications) and select the application that you want to upgrade. From the right-click menu, choose Upgrade Application to upload the image file into Junos Space via HTTP or SCP. But upgrade JunOS Space to latest version 16.1 is different and it is not a easy task. There are many steps to follow especially the last step to upgrade to 16.1 from 15.2R2. Here is