jmp

[安全攻防进阶篇] 四.逆向分析之条件语句和循环语句源码还原及流程控制逆向 (4)

馋奶兔 提交于 2020-08-12 06:59:26
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵! 接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~ 推荐前文: 网络安全自学篇系列-100篇 前文作者讲解了OllyDbg和Cheat Engine工具逆向分析用法,完成植物大战僵尸的游戏辅助器,包括修改阳光值和自动拾取阳光两个功能。这篇文章将继续带领大家来学习科锐钱林松老师在华中科技大学的分享视频,详细讲解条件语句和循环语句源码还原及流程控制逆向。流程控制逆向的具体任务包括: 分支结构的分析要点 if-else 循环结构的分析要点 do-while、while、for 话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,也强烈推荐大家去看看钱老师的视频,加油~ 文章目录 一.C++逆向条件结构基础入门

for(;;)和while(true)的区别

核能气质少年 提交于 2020-08-11 21:16:31
在看线程池源码处理空闲时间逻辑时,看见 for(;;) ,之前也见过,但是项目代码中无限循环经常使用 while(true),就查了一下有何区别。 写一个测试类,创建两个方法,分别使用for(;;) 和 while(true) 实现无限循环,查看编译后的class 文件(命令:javap -c Test.class) 都是优化成goto没区别 。 但是在C语言中有区别,两者底层实现不同: while(1)在编译后: mov eax,1 test eax,eax je foo+23h jmp foo+18h for(;;)在编译后: jmp foo+23h for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。 参考链接: https://blog.csdn.net/Message_lx/article/details/81075688 , https://www.sohu.com/a/240751118_100109711 来源: oschina 链接: https://my.oschina.net/u/3488841/blog/4276807

[安全攻防进阶篇] 四.逆向分析之条件语句和循环语句源码还原及流程控制逆向 (4)

蹲街弑〆低调 提交于 2020-08-11 02:05:58
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵! 接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~ 推荐前文: 网络安全自学篇系列-100篇 前文作者讲解了OllyDbg和Cheat Engine工具逆向分析用法,完成植物大战僵尸的游戏辅助器,包括修改阳光值和自动拾取阳光两个功能。这篇文章将继续带领大家来学习科锐钱林松老师在华中科技大学的分享视频,详细讲解条件语句和循环语句源码还原及流程控制逆向。流程控制逆向的具体任务包括: 分支结构的分析要点 if-else 循环结构的分析要点 do-while、while、for 话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,也强烈推荐大家去看看钱老师的视频,加油~ 文章目录 一.C++逆向条件结构基础入门

教你用两行代码给PHP7添加一个“非空合并”语法糖

爱⌒轻易说出口 提交于 2020-08-11 00:41:57
我们知道从 PHP 5.3 起三元运算符 ? : 有一个写法简洁写法是这样的: <?php $a = 0; $b = $a ?: 1; # $b === 1    这实际上相当于: <?php $a = 0; $b = $a ? $a : 1; # $b === 1    在 PHP5 中,语法分析是这样写的: | expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); } expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); } expr { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); } | expr '?' ':' { zend_do_jmp_set(&$1, &$2, &$3 TSRMLS_CC); } expr { zend_do_jmp_set_else(&$$, &$5, &$2, &$3 TSRMLS_CC); }    在 PHP7 中,由于 AST(抽象语法树)的引入,语法分析有些简化: | expr '?' expr ':' expr { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, $1, $3, $5); } | expr '?' ':' expr { $$ =

双色球 脱壳加去效验

北慕城南 提交于 2020-08-10 13:31:18
【破文标题】双色球 脱壳加去效验 BY lvcaolhx 【破文作者】lvcaolhx 【作者邮箱】 [email]hafiwu@sohu.com[/email] 【作者主页】lvcaolhx.blog.51cto.com 【破解工具】OD/PEID 【破解平台】XPsp2 【软件名称】双色球 【软件大小】 【原版下载】自己到网上搜索 【保护方式】 【软件简介】 【破解声明】菜鸟破解,无技术可言! ------------------------------------------------------------------------ 破解过程】一、查壳,为ASProtect 2.1x SKE -> Alexey Solodovnikov, 用OD载入,运行Asprotect.V2.X.UnpacKer.V1.0E.By.Volx.oSc脚本脱壳, 查看脚本窗口,发现修复所用的相关数据: OEP 的相对地址 = 00003938, IAT 的相对地址 = 00001000 IAT 的大小 =000000394 , Import Fix 1.6载入,输入上面数据进行修复 运行后提示:文件数据损坏!有自效验 二、去自效验。OD载入修复后的文件,下bp rtcFileLen断点,运行,F8后返回到: 004C93CB . FF15 D4B25300 call dword ptr

Linux系统调试之return probe原理和示例

允我心安 提交于 2020-08-10 12:06:58
前面谈了kprobe的原理,其实uprobe也差不多: https://blog.csdn.net/dog250/article/details/106520658 那么return probe如何实现呢? 我们知道,hook一个函数的起始位置非常容易,拿函数名当指针,直接修改成0xcc或者别的什么call/jmp即可,而hook一个函数的结束就没有这么简单了: 函数大小不容易计算。 函数可以在任意位置调用return。 怎么办呢? 很简单,只要执行流到了函数里面,直接取RSP寄存器指示的地址即可,它就是函数返回的地址,hook这个地址,就OK了。 于是,方法也就有了: 在函数开头打int3断点(也可以ftrace,但这里仅谈int3)。 在函数调用时的int3处理函数中获取stack上的return address。 将return adress替换成int3的address(也可以用单独的函数)。 在return address的int3处理函数中调用return probe函数。 恢复正常流程。 如下图所示: 下面是一个示例程序: # include <stdio.h> # include <sys/mman.h> # include <signal.h> // sigframe的RIP偏移 # define PC_OFFSET 192 // sigframe的RSP偏移 #

计算机组成原理(下)

早过忘川 提交于 2020-08-10 09:08:24
第9章 控制单元的功能测试 1单选(1分) 下列说法错误的是_ C_ _。 得分/总分 A. 机器周期、节拍(状态)组成了多级时序系统。 B. 机器周期可看做是所有指令执行过程中的一个基准时间,机器周期取决于指令的功能及器件的速度。 C. 一般来说,机器的运行速度完全取决于CPU的主频。 1.00/1.00 D. 在一个机器周期里可完成若干个微操作,每个微操作都需要一定的时间,可用时钟信号来控制产生每一个微操作命令。 2单选(1分) 计算机执行乘法指令时,由于其操作较复杂,需要更多的时间,通常采用_ B __的控制方法。 得分/总分 A. 人工 B. 中央与局部控制相结合 1.00/1.00 C. 延长机器周期内节拍数 D. 异步 3单选(1分) 下列说法正确的是_ D __。 得分/总分 A. 加法指令的执行周期一定不访存 B. 加法指令的执行周期一定要访存 C. 无正确答案 D. 指令的地址码给出存储器地址的加法指令,在执行周期一定访存 1.00/1.00 4单选(1分) 异步控制通常用于_ A __ 得分/总分 A. CPU访问外围设备时 1.00/1.00 B. 数据运算 C. 微程序控制器中 D. 微型机的CPU控制中 5单选(1分) 控制计算机操作最小的时间单位是**_A**__。 得分/总分 A. 时钟周期 1.00/1.00 B. 访存周期 C. 机器周期 D.

Linux下pwn从入门到放弃

*爱你&永不变心* 提交于 2020-08-09 02:22:21
Linux下pwn从入门到放弃 0x0 简介 pwn,在安全领域中指的是通过二进制/系统调用等方式获得目标主机的shell。 虽然web系统在互联网中占有比较大的分量,但是随着移动端,ioT的逐渐流行,传统的缓冲区溢出又一次有了用武之处 0x01 工欲善其事,必先利其器 Linux下的pwn常用到的工具有: gdb:Linux调试中必要用到的 gdb-peda:gdb方便调试的工具,类似的工具有gef,gdbinit,这些工具的安装可以参考: http://blog.csdn.net/gatieme/article/details/63254211 pwntools:写exp和poc的利器 checksec:可以很方便的知道elf程序的安全性和程序的运行平台 objdump和readelf:可以很快的知道elf程序中的关键信息 ida pro :强大的反编译工具 ROPgadget:强大的rop利用工具 one_gadget:可以快速的寻找libc中的调用exec('bin/sh')的位置 libc-database: 可以通过泄露的libc的某个函数地址查出远程系统是用的哪个libc版本 0x02 检测elf的安全性: (1)拿到efl,首先要用checksec来检测elf运行于哪个平台,开启了什么安全措施,如果用gcc的编译后,默认会开启所有的安全措施。 【1】RELRO

汇编语言(王爽 第三版)检测点

一世执手 提交于 2020-08-08 08:33:58
这本书购于2015.11.30,我大概从2016.3月开始读,历时大概三个月,我们学校开《微机原理与汇编语言》这门课,不过让人感觉很不爽,课本一开始就丢给你一堆东西,意欲让你记住这一大堆东西,然后开始编程,我对编程语言的学习方面要求比较高,所以开始读这本王爽老师写的汇编语言,目前为止,这本书给我的感觉就是,你能学到很多底层的东西,尤其是像键盘的读写原理,屏幕的显示,特别是对内存的操作和管理,不像课本上给你一个中断让你就能显示字符之类的,它会一步一步教你怎么把要显示的东西写到显存里面,这本书显得比较浅显易懂,让人感觉不错,特别是读了这本书再去看那些难度较高的汇编代码及微机原理,效率会高很多,下面是我读这本书的过程中对书中检测点的解答,仅代表个人观点。 第一章 检测点1. 1 1 ) 13   (8kb = 8 * 1024 = 2 ^ 13)   2 ) 1024 0 1023 3 ) 8 * 1024 1024   ( 1 byte = 8 bit,计算机以byte为存储单位) 4 ) 1024 ^ 3 1024 ^ 2 1024 5 ) 2 ^ 6 1 2 ^ 4 2 ^ 2   (kb = 2 ^ 10 Mb = 2 ^ 20 Gb = 2 ^ 30) 6 ) 1 1 2 2 4 7 ) 512 256   (8086的寄存器为16位寄存器,一次可以读取两个字节

2020 "第五空间"智能安全大赛 Re nop

左心房为你撑大大i 提交于 2020-08-08 04:59:21
测试文件: https://wwa.lanzous.com/is4hte2ulfc 代码处理 这道题是花指令相关题目,利用int 80h做中断。 首先将包含int 80h中断的 sub_804857B , sub_80485C4 函数和反调试函数 sub_804865B 全部nop掉。 接着,将 push 地址 ... pop ebx jmp ebx 这种形式的代码,都修改为 jmp 地址 这样在反编译后能够看到跳转的函数 void __cdecl main( int a1, char ** a2) { char *v2; // eax int savedregs; // [esp+8h] [ebp+0h] v2 = * a2; puts( " input your flag " ); __isoc99_scanf( " %d " , & dword_804A038); ++ dword_804A038; ++ dword_804A038; dword_804A038 -= 0x33333334 ; ++ dword_804A038; sub_8048751(( int )& savedregs); } 代码分析 第一部分 第9~13行代码,对输入num+3-0x33333334 第二部分 进入sub_8048751函数 int __usercall sub_8048753@