• Section1 两个逆向工具的作用:
  • Section2 ida伪代码分析
  • Section3 OllyDbg的基本操作

这里是ctf逆向小白学习之路的第一站

Section1 两个逆向工具的作用:

1:IDA pro7.0是完整版本 7.2只有64 f5可以查看源码,6.8 pro的有些文件grapf view不能分析,作用:静态调试,32位的程序用32位的ida分析
2:OllyDBG,作用:动态调试,只能调试32位的程序

Section2 ida伪代码分析

下面展示一些 内联代码片

unsigned __int64 Decry()
{ char v1; // [rsp+Fh] [rbp-51h]int v2; // [rsp+10h] [rbp-50h]int v3; // [rsp+14h] [rbp-4Ch]int i; // [rsp+18h] [rbp-48h]int v5; // [rsp+1Ch] [rbp-44h]char src[8]; // [rsp+20h] [rbp-40h]__int64 v7; // [rsp+28h] [rbp-38h]int v8; // [rsp+30h] [rbp-30h]__int64 v9; // [rsp+40h] [rbp-20h]__int64 v10; // [rsp+48h] [rbp-18h]int v11; // [rsp+50h] [rbp-10h]unsigned __int64 v12; // [rsp+58h] [rbp-8h]v12 = __readfsqword(0x28u);*(_QWORD *)src = 357761762382LL;v7 = '\0';v8 = 0;v9 = 512969957736LL;v10 = '\0';v11 = 0;text = (char *)join(key3, &v9);strcpy(key, key1);strcat(key, src);v2 = 0;v3 = 0;getchar();v5 = strlen(key);for ( i = 0; i < v5; ++i ){if ( key[v3 % v5] > '@' && key[v3 % v5] <= 'Z' )key[i] = key[v3 % v5] + 32;++v3;}printf("Please input your flag:");while ( 1 ){v1 = getchar();if ( v1 == '\n' )break;    输入回车程序终止if ( v1 == ' ' ){++v2;}else{if ( v1 <= 96 || v1 > 122 ){if ( v1 > 64 && v1 <= 90 )str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;}else{str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;}if ( !(v3 % v5) )putchar(' ');++v2;}}if ( !strcmp(text, str2)puts("Congratulation!\n");elseputs("Try again!\n");return __readfsqword(0x28u) ^ v12;
}

//u:usigned

//_QWORD:Bit,Byte,Word,Dword,Qword. 8个比特(Bit)=一个字节(Byte),两个字节称为一个字(Word),两个字称为一个双字(Dword),两个双字称为一个四字(Qword)。
可以把_WORD理解为int,_Dword、 _QWORD理解为long int,这里src是一个强制类型转化为int类型的指针,char本质上也是int

//357761762382LL:涉及大小端序存储的问题
大端序(Big-endian):高位字节存入低地址,低位字节存入高地址;小端序(Little-endian):低位字节存入低地址,高位字节存入高地址,
这里可以看到两个十六进制是大端序,但是数据在内存中都是小端序,所以要将其反转一下。鼠标选中16进制按r键得到字符串,再反转为’NDCLS’和’hadow’
得到:
text= "killshadow"11个字符
key= "ADSFKNDCLS”11个字符

//Join:将key3和&v9两个字符串连接起来
逆向编写脚本:
思路1:
11次外循环:依次将正确的v1值存储至flag[]中
内循环:找到正确的v1值使得str2[v2]值与text中的一个字符能够比对相等,v1值可以用循环129次,ASCII码0-128依次试,因为输入的数在ASCII码是不确定的,所以倒推可以把所有的数都试一遍
思路2:
已知flag变换后要比对的字符串
用已知的字符串经过已知的变换式子倒推未知的变量
str[i]=(v1-39-key[i]+97)%26+97= text[i];
text[i]、key[i] 已知,反写式子求v1

总结:
1:大端序和小端序存储
2:Word,Dword,Qword数据类型
3:Join函数的作用
4:逆向编写脚本,
首先从最后一步比较是否相等的字符串倒推

Section3 OllyDbg的基本操作

背景知识:pe文件用OllyDbg打开后,首先看到的是EP (EntryPoint)入口点代码,是执行程序最先执行的代码,依赖于CPU,之后是编译器为保证程序正常运行自动添加的启动函数(不同编译器产生的启动函数都不同),而逆向分析首先是找到pe文件的main函数。

1、用OllyDbg寻找主函数
以hello word.exe为例
这里先了解一下hello word.exe(双击会出现一个box框显示“hello word!”)
main函数
方法一:代码执行法(只适用于代码量不大,功能明确的程序)
导入OD后,不断执行F8(单步步过,遇到call指令仅执行函数,不进入函数内部),当执行到main函数时,如果main函数功能是调用对话框显示信息,则在这一步程序会暂停,并执行mian函数功能,此时的地址就是main函数的地址,但如果main函数功能是比较两数的大小,那么f8会执行完整个程序,而不会在main函数处暂停

方法二:根据运行程序,程序给出的提示寻找main函数:
1)根据字符串找main函数
Cpu窗口右击查找-所有参考文本地段,双击即可进入cpu窗口对应字符串

2)查看被调用的api找main函数
推测main函数中使用的api—> 查看所有被调用的api(Cpu窗口右击查找-所有模块间的调用)—>双击进入函数

3)查看程序所有api找main函数(当程序被压缩保护后,OD就不能列出api调用列表了)
推测main函数中使用的api—>查看所有被加载的dll中的api(Cpu窗口右击查找-所有模块中的名称)—>定位到messagebox函数—>双击查看该函数的地址空间(我的理解是查看这个函数的具体实现方法)—>右侧寄存器窗口ESP的值即进程栈的地址,这里下一个断点,F9运行,程序停在了断点处,说明此处确实是mian函数的执行处—>查看栈窗口,看到call调用指令,说明0040100E处的指令调用了messagebox函数,go to(ctrl+g)跳转至0040100E,这里就是main函数的所在处

2、用OllyDbg修改pe文件(打补丁/破解)
以hello word.exe为例
1)直接修改字符串缓冲区(数据区的hex 数据窗口)
Go to跳转至4092a0,ctrl+e编辑,选中修改的ascii码右击复制到可执行文件,右击保存文件

2)在其他内存区新建字符串后,直接修改汇编码栏处被调用命令中的地址(在cpu窗口,将被传递给消息函数)
找到一个空闲的内存区,ctrl e编辑,修改cpu区push地址

懂得修改cpu窗口处的信息很重要,针对一些绕过,比如程序的功能是比较两个信息是否一样(用到JE命令:条件跳转指令,分为有条件跳转和无条件跳转),我们就可以修改JE命令为无条件跳转,就可以直接跳转到最后的结果了

3、总结:
1:跳转到某一地址处(go to):ctrl+g
2:编辑hex数据:ctrl+e
3:修改cpu区指令/地址:空格或直接双击
4:Push 00409FA0:将00409FA0地址处的数据压入栈,F8执行该命令后会发现ESP的值减小

//压栈和出栈与ESP寄存器(栈指针寄存器)有关,一个进程中,ESP初始状态指向栈底,push将数据压入栈,ESP上移,向低地址移动,pop将数据弹出栈,ESP下移,向高地址移动,栈为空,ESP指向栈底

re之ida和OllyDbg的使用与代码分析相关推荐

  1. 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程

    标 题: [原创]使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 作 者: shayi 时 间: 2015-02-12,05:19:54 链 ...

  2. 案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程。 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下:

    案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下: 1 ...

  3. 恶意代码分析实战 6 OllyDbg

    6.1 Lab 9-1 程序分析 首先,进行静态分析,使用strings. CreateFileA RegQueryValueExA RegOpenKeyExA RegSetValueExA RegC ...

  4. 恶意代码分析实战-通过IDA对恶意代码进行静态分析(Lab05-01.dll)

    本文章为<恶意代码分析实战>的题目答案解析以及个人的一些理解,将通过一下问题对恶意代码Lab05-01.dll进行分析: D1lMain的地址是什么? 使用Imports窗口并浏览到get ...

  5. 初识Frida--Android逆向之Java层hook (一)

    目录 0x00 文中用到的工具 0x01 hook示例的安装与分析 安装 源代码分析 0x02 frida自带的Messages机制与进程交互 0x03 Javascript代码构造与执行 方法一:获 ...

  6. python 的emulate函数封装_用模拟执行实现Objective-C代码自动化分析

    火眼高级逆向工程实验室脚本系列:用模拟执行实现Objective-C代码自动化分析 写在前面的话 京东安全开源的 qiling 是一个很不错的想法,但是唯一的问题在于它实现的东西太多,比较笨重.有的时 ...

  7. PWN题型之Ret2Libc

    文章目录 前言 0x1 :使用前提条件 0x2 :解题思路 0x3 :32位程序libc题型模板 0x4 :代码的解析 0x5 :64位程序实例 前言 菜鸡总结,如有不对,请不吝赐教. 0x1 :使用 ...

  8. 随想录(OllyDbg和IDA Pro的配合使用)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在软件处理中,OllyDbg和IDA Pro一般是配合使用的.前者主要用于动态的程序调试,后者 ...

  9. ret-sync插件:windbg/ollydbg+ida逆向调试神器

    ida有不少主流调试器的扩展插件,如windbg/gdb等,可以在静态分析的基础上动态调试二进制文件.可是众多调试器扩展中没有兼顾ollydbg,难免觉得是一项缺憾. 最近在github上发现一个插件 ...

  10. IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总

    IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总 ********************************** 案例一: 使用IDA PRO+OllyDbg+PEview 追踪w ...

最新文章

  1. 关于ubuntu的root密码问题
  2. c语言程序设计dowhile,(C语言while、dowhile、for循环课程5.docx
  3. win8系统软件不兼容怎么办
  4. 大数据学习笔记09:MapReduce概述
  5. php默认语法,PHP基本语法总结
  6. 第七篇 ScrollView控件
  7. es6的初级简易总结
  8. Linux之ping命令
  9. 使用VC2005一些问题及解决方案
  10. 白话Android音频系统原理
  11. CSS:使用媒体查询进行网页元素的缩放
  12. 卡方 matlab,用matlab算卡方值
  13. linux 卸载二进制包,Ubuntu19.10系统的软件安装与卸载命令
  14. oracle10g笔记1
  15. 硬件电路设计入门奉献系列(一)
  16. 软件工程 in MSRA 第一周博客作业
  17. 日语资料和电子版教材无偿分享
  18. @Validated和@Valid的使用
  19. bash入门脚本(未完善)
  20. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度

热门文章

  1. android 画图功能,Android实现简单画图画板
  2. 本命年第三季度阶段反思
  3. blender导入png图片不透明 | png贴图在blender中有黑底
  4. LIO-SAM_based_relocalization运行kitti回环序列并保存轨迹评估(一)——————源码的分析
  5. 尚德机构季报图解:净利达1.5亿 抗周期和盈利能力稳健
  6. 三种方式实现echarts树图的背景图片设置
  7. 读书笔记 ——《系统程序员成长计划》篇4:拥抱变化
  8. 【魔方代码】1200行C语言代码实现“魔方”程序,学会它买魔方的钱都省了,拿走不谢~
  9. 游戏支付接口平台如何选择
  10. Android:方向传感器