avatar
Articles
65
Tags
0
Categories
16

Home
Archives
Categories
About
月明星稀
Search
Home
Archives
Categories
About

月明星稀

反调试技术_各种标志
Created2022-03-04|re-Note
反调试技术(1)_各种标志总之就是记录各种用于防止反调试的字段,感觉没啥用。 参考、摘抄自:https://ctf-wiki.org/reverse/windows/anti-debug NtGlobalFlag概念解释在 32 位机器上, NtGlobalFlag字段位于PEB(进程环境块)0x68的偏移处, 64 位机器则是在偏移0xBC位置. 该字段的默认值为 0,当调试器运行时,该字段有时会被更改(不一定)。 123FLG_HEAP_ENABLE_TAIL_CHECK (0x10)FLG_HEAP_ENABLE_FREE_CHECK (0x20)FLG_HEAP_VALIDATE_PARAMETERS (0x40) 程序中可能会对该字段进行检测,若不为00就直接跳转到being_debugged 注:NtGlobalFlag的那 3 个标志位只有当程序是由调试器创建, 而非由调试器附加上去的进程时, 才会被设置. 检测方式 (32位)注:fs寄存器指向当前活动线程的TEB 12345mov eax, fs:[30h] ;Process Environment Bloc ...
huawei系统软件卸载
Created2022-03-04|android
huawei系统软件卸载参考,摘抄自:http://www.usbmi.com/5700.html 正常操作的情况下,安卓手机的控制只需要单用户即可,因此卸载用户目录下的软件即可,不需要从系统目录连根拔起斩尽杀绝(这样刷机的时候还能恢复) 第一步: 手机的”设置”—“系统”—“开发人员选项”,界面下滑找到”调试”,打开“USB调试”、“连接USB时总是弹出提示”“监控ADB安装应用”、“仅充电模式下允许USB调试”这四个选项,有些不让选也影响不大。 第二步: 电脑下载调试工具包 ADB Kits 数据线连接电脑和手机,连接后在手机选择仅充电 手机还会有一条连接确认,确认即可。 第三步: adb命令(做打码处理): 123C:\Users\xxx\Desktop\Andriod\adb>adb devicesList of devices attachedKWG5Txxxxxx07xx5 device 说明已经连接了设备,下面就可以操作了 第四步: 1234获取系统当前用户的安装列表:adb shell pm list packages >alist.t ...
机器码总结
Created2022-03-03|other
机器码总结摘抄自:https://www.cnblogs.com/liushuijinger/archive/2012/04/05/2433718.html 原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。 例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 10101011 位数不够的用0补全。 PS:正数的原、反、补码都一样。 反码: 知道了什么是原码,那反码就更是张飞吃豆芽——小菜一碟了。知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码,为什么呢?因为反码就是在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)就可以了。 例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100 补码: 补码也非常的简单就是在反码的基础上按照正常的加法运算加1。 例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101 移码: 移码最简单了, ...
浮点数的表示
Created2022-03-03|other
浮点数的表示c语言中的浮点数:float , double , long double 首先,为什么要使用浮点方法,为什么要使用浮点数而不使用定长小数。 这是因为如果小数定长,其精度就是固定的,也就是说,这样的表示方法就会有固定长度的整数位和小数位。一般这些位数都不会被全部用到,甚至很有可能牺牲精度,或者造成空间浪费,因此,需要创造一种小数点可以移动的数字表示方法,即浮点数。 其次,如何科学的表示二进制数。 这里引入二进制的科学计数法:十进制有科学计数法,任何十进制数都可以表示为x.xxxx*10^n(x为0-9),同理,所有二进制数也可以表示为1.xxx*2^n(x为0-1),举个例子: 12101101.11101101转化为科学计数法1.0110111101101*2^5 那么按照这样的思路,一个二进制数,就能表示为一个整数位定长为1,且一定是1的数字1.0110111101101(因为整数位永远是1,因此其实可以默认),和另一个整数5,代表乘2的多少次方。 然后,再加入正负的可能性,我们就可以完全的表示一个二进制数。** 123456N=((-1)^S)*(R^E)*M其中N ...
writeup_intOverflow_pwn
Created2022-02-28|pwn
writeup_intOverflow_pwn 先小查一下,开启了堆栈不可执行,放ida吧 逻辑很清楚,进login username:0x19pw:0x199 好长的密码 密码的长度为3-8则输出错误,否则正确。 那么首先要找溢出点,在login函数中,空间给的很大,而且read()函数限制严格,不可能溢出。 然后来到check函数中,一开始对密码的长度做了校验,然后把校验长度之后的密码通过strcpy放入dest中,这里dest的大小很小: 如果能跳过校验,我们就可以覆盖掉返回地址,然后调用what_is_this函数: 那么如何绕过校验,让strcpy执行,复制足够长的字符串呢?这就需要整数溢出 Int8, 等于Byte, 占1个字节. 可以看到int8非常的小,最大就是255, 如果存入int8的值比255还大,就会循环溢出。 因此 password字符串的长度可以是3-8个字符,也可以是259-264个字符 就靠这个原理就可以构造shellcode了,如下: 123456789101112131415161718from pwn import *p=r ...
writeup_guessNum_pwn
Created2022-02-27|pwn
writeup_guessNum_pwn咱就是说,还得会c语言我是没想到的,枯了 先check一下: 好家伙,一片绿,哈人,没法覆盖返回地址了。 先扔ida: 循环产生随机数,然后猜数字,v7似乎可以做一个溢出 然后就需要一点点c语言知识,在上面的区域中,seed变量的值是可以覆盖的,而seed是什么呢? 在使用rand()函数时,首先需要使用srand设定一个seed,只有随机生成了seed每一次rand()顺序生成的数列才是不同的,若seed相同时,生成的随机数列也是相同的。 我不信,小试一下: 我信了。。。 按照逆向的思路,我们可以看看随机的seed是如何生成的,进入sub_BB0函数: 果然不是逆向,是在本地文件中读取的,那没事了。 所以只要覆盖seed,并且用seed在本地生成随机数,然后再传过去就可以了,创作一个脚本: 顺便学一下python中调用c语言。 cyberpeace{5df2a9bab4fa085d9359d4c9722f857c}
Canery(金丝雀)的介绍与绕过
Created2022-02-27|Note-re
Canery(金丝雀)的介绍与绕过摘抄文献 :https://blog.csdn.net/weixin_43713800/article/details/105273284 Canary 的意思是金丝雀,来源于英国矿井工人用来探查井下气体是否有毒的金丝雀笼子。工人们每次下井都会带上一只金丝雀。如果井下的气体有毒,金丝雀由于对毒性敏感就会停止鸣叫甚至死亡,从而使工人们得到预警。 当我们使用栈溢出进行攻击,或者覆盖返回地址时,会覆盖掉源数据。金丝雀机制就是在栈底插入cookie验证信息,如果cookie被覆盖就会验证失败。 Canary 与 Windows 下的 GS 保护都是缓解栈溢出攻击的有效手段。 Canary的使用(gcc)可以在 GCC 中使用以下参数设置 Canary: -fstack-protector 启用保护,不过只为局部变量中含有数组的函数插入保护-fstack-protector-all 启用保护,为所有函数插入保护-fstack-protector-strong-fstack-protector-explicit 只对有明确 stack_protect attr ...
writeup-CGfsb-pwn
Created2022-02-26|pwns
writeup-CGfsb-pwn麻了,pwn好难哈哈哈哈哈哈 本题目是利用字符串格式化漏洞来更改pwnme变量的值。 先看看pwnme变量存在哪了? 简单地说,就是一个会自动初始化为0的可读写区段。 那么,到底什么是字符串格式化漏洞? printf函数含有的参数构造是由一个固定的format字符串和多个输出表列组成的,他们在函数调用时被一起推入内存,当我们在format字符串中形如填了%啥的东西后,他就会自动在内存中寻找参数(也就是我们推入的输出表项); 在printf函数中,有一个带有赋值功能的格式化字符串是%n,其功能就是记录在%n之前输出的字符数,然后将此值赋给一个变量。那赋值给哪一个变量呢?我们就需要传入这个变量的指针,也就是使用&变量名来接收参数,即类似于下图中的语法: 这样一来,我们就可以利用printf进行赋值了。 那么,我们要赋值给pwnme这个变量,要怎么做呢。 我们只能传入一个参数,因此需要手动设定在format字符串中%n这个赋值操作的偏移量,他并不是直接指向下一个地址,而是指向了某一个存了目标(即pwnme)变量的指针的地址,那么这个指针肯定也 ...
汇编函数调用的传参规则
Created2022-02-26|Note-re
汇编函数调用的传参规则0x01 一般流程函数调用一般有个模板。 123456789101112131415161718192021222324push esmov ebp,esp//这里提升堆栈sub esp,0x40 //这里是开辟缓冲区,不同编译器开辟的缓冲区大小不同。push edipush esipush ebx//保留现场lea edi, dword ptr ss:[ebp-0x40]mov ecx,0x10mov eax,0xccccccccrep stos dowrd ptr es:[edi]//填充缓冲区--------------------------------------------------------//这里是写函数的功能--------------------------------------------------------pop ebxpop esipop edi//恢复现场mov esp,ebppop ebpret 中间的ccc…就是填充缓冲区。填充后可以用来写入局部变量。EBP后面的高址,存有恢复用的EIP,和call函数前push的参 ...
writeup_babyXOR_reverse
Created2022-02-25|reverse
writeup_babyXOR_reverse有不知名壳,esp定律手动脱 放进ida,好家伙,七百个函数,离大谱 先看看main函数里有啥,发现花里胡哨,查教程,麻烦的离谱,果断动调看看。 上为输入函数,随便输入了一串字符 运行到此处发现: 阿哲? 行8 flag{2378b077-7d6e-4564-bdca-7eec8eede9a2}
1…345…7
avatar
lhl_2507
Articles
65
Tags
0
Categories
16
Recent Post
adb使用学习2023-12-10
LAnoBERT System Log Anomaly Detection based on BERT Masked Language Model (Reading note)2023-09-20
环境变量理解2023-06-25
No title2023-05-22
Wireshark分析TLS协议2023-04-22
Categories
  • Note-re8
  • ai2
  • android2
  • cve6
  • environment3
  • kali2
  • linux5
  • network1
Archives
  • December 20231
  • September 20231
  • June 20231
  • May 20231
  • April 20232
  • March 20233
  • January 20232
  • September 20221
Info
Article :
65
UV :
PV :
Last Push :
©2020 - 2023 By lhl_2507
Framework Hexo|Theme Butterfly
Local search
Loading the Database