GWCTF 2019pyre(16)
发现是一个pyc 文件
用工具
打开后。
看到这些代码…
这里主要就是code += num这句
这行代码将变量 num 的值追加到列表 code 的末尾。
这里看看chatGPT
结合我自己的
简单的逆向一下就可以了
这个是我写的代码:
1234567891011121314151617181920code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', '; ...
简单注册器(15)
下载下来是一个APK文件
用jeb打开找到flag的位置
然后就是
c++
1234567891011121314151617181920212223#include <iostream>#include <string>using namespace std;int main(){ string x = "dd2940c04462b4dd7c450528835cca15"; char a; int i = 0; x[2] = (char)(x[2] + x[3] - 50); x[4] = (char)(x[2] + x[5] - 0x30); x[30] = (char)(x[0x1F] + x[9] - 0x30); x[14] = (char)(x[27] + x[28] - 97); for (; i < 16; ++i) { a = x[0x1f - i]; x[0x1f - i] = x[i]; x[i] ...
二进制安全注入技术(41)
二进制安全注入技术这里的注入和sql注入不一样。
这里的注入是将自己写好的代码到别的进程中去运行,然后别的进制运行之后也会运行自己写的代码。
这个就是基本的注入的想法。
进程注入式一种广泛用于恶意软件和无文件攻击中的逃避技术。详细内容可以看下文。
https://www.freebuf.com/articles/system/187239.html
CreateRemoteThread和LoadLibrary的DLL注入这个是进程注入最常见的技术。恶意文件将恶意的动态链接库的路径写入另一个进程的虚拟地址空间,通过再目标进程中创建远程线程来确保远程进程加载它。
CreateRemoteThread注入: CreateRemoteThread是Windows API中的一个函数,它允许在目标进程中创建一个远程线程并在其中执行指定的函数。DLL注入通过以下步骤实现:
首先,加载目标进程并获得其句柄(handle)。
使用VirtualAllocEx函数在目标进程中分配一块内存,用于存储DLL的路径或代码。
使用WriteProcessMemory函数将DLL路径或代码写入目标进程的内存 ...
二进制内核初探之驱动开发入门(40)
这个研究了一下,先跳过了。后面再来学
插入排序
插入排序的基本原理插入排序就是是对于一对原本有顺序的数组,将没有顺序的数组插入到有序的数组里面去。
这里呢,我们默认将要排序的数组靠前的数是有序的【就认为第一个数所组成的是有序的】
这里就是只有一个数,然后将后面的数和前面的数进行比较,如果比前面的数小,就和前面的数进行交换
这个有点像倒着的冒泡排序
就是第一个数字有序,然后从第二个数字开始和前面比较
单个数组的例子1234567891011121314151617181920212223242526272829#include <stdio.h>void exchange(int a[], int i, int j)//a是要交换的数组,i和j是要进行交换的位置{ int temp = a[i]; a[i] = a[j]; a[j] = temp;}void print(int a[], int sz) { for (int i = 0; i < sz; i++) { printf("%d", a[i]); }}int main( ...
永恒之蓝漏洞复现(39)
这里是用的MSF这个框架来进行漏洞利用
首先要准备好靶机win7
和攻击机kali
这里用的是MSF这个工具emmm
过程还是蛮简单的
这里可以去看看网上的过程
我这里就不赘述了
刮开有奖(14)
正常走,看到是一个32位的文件,无壳
然后先用IDA打开看看
其实,我打开看到代码蒙蒙的,很正常的用shift+f12看看字符串
但是还是一无所获【可能我菜鸡了】
然后又看了看main函数
感觉也对我来说也没有什么可以让我触动的地方
看了往上的WP后才知道 DialogFunc 这个函数有鬼
所以再main函数里面找到这个函数然后才开始了我的分析
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4){ const char *v4; // esi const char *v5; // edi int v7[2]; // [esp+8h] [ebp-20030h] BYREF int v8; // [esp+10h] [ebp-2002 ...
整数溢出(38)
基本原理首先来看看啥是整数溢出
整数溢出就是说:某一个整数的值大于了它原本定义空间的大小,就会发生溢出,它又重新从0开始计算大小。
比如1字节,最大是255
如果定义的是一个有符号数,则表示的值是-127~128
当定义某一个数超过128的时候,就会溢出,比如129其实就是-127
这里我们看一个代码更加的形象
123456789#include <stdio.h>int main(){ unsigned short int a = 1; unsigned short int b = 65537; if(a == b){ printf("Int overflow successfully!\n"); } return 0;}
可以看到这里a和b是相等的
这个是因为无符号数ungigned short int
范围是0~65535
当超过65535的时候就会 溢出,比如65536就是0。所以上面的65537==1
(这里其实再数学上叫同余式)
题目现在基本懂了
来看看攻防世界的int_overflow
看到这个 ...
冒泡排序
冒泡排序的基本原理数组
第一个和下一个比较,如果比下一个大,则和下一个交换位置。
然后该数又和再下一个比较,以此类推。
当第一个数放好位置后,第二个数来重复上面的过程
12345678910111213141516171819202122232425262728#include <stdio.h>int main(){ int arr[] = { 4,5,2,3,6,9,8,7,1, }; //int i = sizeof(arr) / sizeof(arr[0]); //每当“冒泡”一次的时候,下一次冒泡就会少一次所以就需要用i-- //为了使得循环不奇怪掉,所以需要让i>0 for(int i = sizeof(arr) / sizeof(arr[0]);i>0;i--){ for (int j = 0; j < i - 1; j++) { //这里用i-1 是为了不能溢出,跃出界限 if (arr[j]>arr[j+1]) {//第一个和第二个 ...
Python反编译器
这个是一个python的工具
我已经在kali里面安装好了
使用uncompyle6
需要用-o 来重新取名字
使用:
1$ uncompyle6 *编译的python文件-pyc-or-pyo*
查看帮助文档
1$ uncompyle6 -h