0%

ctypes学习笔记二

——用python写一个调试器

ctypes创建进程:

1
2
3
4
import my_debugger

debugger = my_debugger.debugger()
debugger.load(b"./01-ErrorShow.exe") # 这里也要传递bytes

主要是调用了kernel32.CreateProcessA这个API函数:

该函数定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
BOOL CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);

具体文档在这里

阅读全文 »

ctypes学习笔记一

ctypes调用dll:

python自带ctypes库,不用另外安装。

调用printf的例子:

1
2
3
4
5
6
# ctypes混合编程,由于gcc版本是32位,所以这里用32位的Python解释器(本机环境python3.8)
from ctypes import *
libc = CDLL("./msvcrt.dll")

message_string = b"Hello world\n" # python3默认是Unicode编码,printf不支持
libc.printf(b"%s", message_string)
阅读全文 »

数据结构

第一章:数据结构的

基本概念

定义

  • 在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间的关系称为结构(Structure)。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。

逻辑结构

  • 逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。它与数据的存储无关,是独立于计算机的

  • 数据的逻辑结构分为线性结构和非线性结构

    • 集合 结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。 类似于数学上的集合
    • 线性结构 结构中的数据元素之间只存在一对一的关系。比如排队
    • 树形结构 结构中的数据元素之间存在一对多的关系。比如家族族谱
    • 图状结构或网状结构 结构中的数据元素之间存在多对多的关系。 比如地图
阅读全文 »

计算机操作系统

一.操作系统引论

1.操作系统的目标和功能

  • 目标

    • 方便性
    • 有效性
      • 提高系统资源利用率
      • 提高系统吞吐量
    • 可扩充性
    • 开放性
  • 作用

    • OS作为用户与计算机硬件系统之间的接口
      • 命令方式
      • 系统调用方式
      • 图标–窗口方式
    • OS实现了对计算机资源的抽象
阅读全文 »

MD5摘要算法

MD5不能称作加密算法,因为不能还原出原本的密码。

MD5算法在逆向中经常遇到,所以了解其背后的原理和加密特征是有必要的,因此专门整理一下。

以下以c语言的其中一种实现为例。


阅读全文 »

前言:

本来跑了个django网站,后来为了方便做web题又安装了PHP study,于是原本装的apache和phpstudy内置的apache服务冲突了,导致每回都要手动重启Apache。

干脆把原来装的Apache关掉,让Django和php用不同的端口解析。

0x00 配置Django及其mod_wsgi

安装mod_wsgi

  1. 注意,因为apache是32位的,所以mod_wsgi也应该选择32位的。mod_wsgi的官网在这里。

    1
    https://code.google.com/p/modwsgi/

    但是因为没有windows编译版本(自己编译几乎都是以失败告终),所幸在这里可以下载到编译版本:

    1
    http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

    ​ 这里选择

    1
    mod_wsgi-4.6.5+ap24vc14-cp36-cp36m-win32.whl

    将你下载的.whl 文件,放在一个目录中,我放在了 python的 \Scripts 文件夹中,然后 使用cmd cd命令到这个目录

阅读全文 »

给萌新的逆向入门教程

0x00 事前BB

pwn逆向可以说是CTF中比较难的方向了,但却是最不可或缺的一环
说到这里就不得不说一下CTF中的鄙视链了:
分别是:pwn-爷逆向-爹web-狗

pwn和逆向有一定的共同点,但是毕竟咱也没人玩pwn啊,所以就随便写写逆向教程好了。

逆向的特点比较突出,那就是入门难起点高学习曲线陡。逆向在学习的过程中成就感并没有web那么突出,总体上的感觉就是枯燥,但是如果你喜欢那种一层层抽丝剥茧之后豁然开朗的感觉,那就开搞吧。

阅读全文 »

考研备考之余练练逆向,从ad-world进阶区刷起,每晚一道;

re3 re2-cpp-is-awesome

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
__int64 __fastcall main(int a1, char **a2, char **a3)
{
char *v3; // rbx
__int64 v4; // rax
__int64 v5; // rdx
__int64 v6; // rax
__int64 v7; // rdx
_BYTE *v8; // rax
__int64 i; // [rsp+10h] [rbp-60h]
char v11; // [rsp+20h] [rbp-50h]
char v12; // [rsp+4Fh] [rbp-21h]
__int64 v13; // [rsp+50h] [rbp-20h]
int v14; // [rsp+5Ch] [rbp-14h]

if ( a1 != 2 )
{
v3 = *a2;
v4 = std::operator<<<std::char_traits<char>>(&std::cout, "Usage: ", a3);
v6 = std::operator<<<std::char_traits<char>>(v4, v3, v5);
std::operator<<<std::char_traits<char>>(v6, " flag\n", v7);
exit(0);
}
std::allocator<char>::allocator(&v12, a2, a3);
std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string(&v11, a2[1], &v12);
std::allocator<char>::~allocator(&v12);
v14 = 0;
for ( i = std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::begin(&v11); ; sub_400D7A(&i) )
{
v13 = std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::end(&v11);
if ( !(unsigned __int8)sub_400D3D(&i, &v13) )
break;
v8 = (_BYTE *)sub_400D9A(&i);
if ( *v8 != off_6020A0[dword_6020C0[v14]] ) // 关键点
sub_400B56();
++v14;
}
sub_400B73();
std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>::~basic_string(&v11);
return 0LL;
}
阅读全文 »

使用python3解析html网页表格

实习实在是太无聊了,看书是看不进去的,跟着老师对着那些宛如ZZ的上古软件点点点那更是不可能,于是想起之前找学弟PY,想解析一下课程表的页面,无果,于是就写着玩玩。虽然弄出来好像也没啥卵用……

需求

使用python3解析html网页,并输出成json结构树

参考代码:

1
https://github.com/schmijos/html-table-parser-python3

这里是一个外国小哥哥写的解析代码,测试了一下可以解析,但是只能解析简单表,对于复杂表格他这里没有处理。

阅读全文 »

攻防世界-web进阶-部分writeup

Web_php_include

首先打开题目:

1
2
3
4
5
6
7
8
9
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>

有文件包含,没拿到文件名,而且循环过滤,看起来绕过是不太容易。

阅读全文 »