<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zhang14916的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zhang14916</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zhang14916]]></copyright><item><title><![CDATA[android 安全sdk相关]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/144015513</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/144015513</guid><author>zhang14916</author><pubDate>Wed, 27 Nov 2024 02:08:45 +0800</pubDate><description><![CDATA[在网上有看到许多android安全sdk相关的内容，有重复的也有比较新鲜的内容，这里做一个整体的合集，以及后续又看到一些比较新的东西会一起放在这里。android内sdk目前可以分为以下几个部分（有一些部分可能会存在一些重合）——设备指纹，root相关，环境检测，模拟器特征，改机软件。]]></description><category></category></item><item><title><![CDATA[ASISCTF]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/121071806</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/121071806</guid><author>zhang14916</author><pubDate>Sun, 31 Oct 2021 23:40:16 +0800</pubDate><description><![CDATA[warm up

题目代码如下图所示，我们会发现整个加密过程如下所示，先在flag后面加上p长度的随机字符，然后选择pow(s,i,p)的结果选择字符重新连接字符串实现加密


#!/usr/bin/env python3

from Crypto.Util.number import *
import string
from secret import is_valid, flag

def random_str(l):
	rstr = ''
	for _ in range(l):
		rstr += s]]></description><category></category></item><item><title><![CDATA[PBCTF2021]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/120814969</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/120814969</guid><author>zhang14916</author><pubDate>Sun, 17 Oct 2021 19:44:46 +0800</pubDate><description><![CDATA[PBCTF20211 MISC1.1 幽灵作家 Ghost Writer2 Crypto2.1 Alkaloid Stream2.2 Steroid Stream
1 MISC
1.1 幽灵作家 Ghost Writer
【题目介绍】
当我在写我的新畅销小说的开头时，一个鬼魂占据了我的键盘并开始输入旗帜！我试图完成这个故事，但不久之后电脑就死机了。幸运的是，我的数字录音机记录了这一切。你能恢复吗？

我是个写手很慢的人，我的自定义键盘只有 27 个唯一键；“az”和“”（空格）。没有使用其他键。另外，我似乎]]></description><category></category></item><item><title><![CDATA[陇剑杯 2021 write up整理]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/120814938</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/120814938</guid><author>zhang14916</author><pubDate>Sun, 17 Oct 2021 19:43:20 +0800</pubDate><description><![CDATA[竞赛 write up 收集和整理陇剑杯 2021 write up整理1 签到题1.12 JWT2.12.22.32.42.52.63 webshell3.13.23.33.43.53.63.74 日志分析4.14.24.35 流量分析5.15.25.36 内存分析6.16.27 简单日志分析7.17.27.38 SQL注入8.18.28.39 wifi9.110 IOS10.110.210.310.410.510.6   暂未发现write up10.710.811 加密的大文件11.1
陇剑杯 202]]></description><category></category></item><item><title><![CDATA[TCTF writeup]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/118634267</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/118634267</guid><author>zhang14916</author><pubDate>Sun, 08 Aug 2021 23:00:39 +0800</pubDate><description><![CDATA[crypto

checkin

题目如下图所示



我们发现题目是要求算一个比较复杂的算数，且要求十秒内出结果。这里需要调数学库gmpy2计算，使用python来算会超时。解题过程如下


from pwn import *
import hashlib
import math
import gmpy2
io=remote("111.186.59.11",16256)
io.recvuntil("(2^")
tian=int(io.recvuntil(")")[:-1],10)
io.recvuntil]]></description><category></category></item><item><title><![CDATA[Cybrics ctf]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/119520423</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/119520423</guid><author>zhang14916</author><pubDate>Sun, 08 Aug 2021 22:39:05 +0800</pubDate><description><![CDATA[1.Signer

阅读源码，同时nc一下我们会发现，该题是ECDSA签名。选项1是使用ECDSA对一个当前时间戳+salt进行签名，输出(R,S,HASH),。选项2是让我i们输入使用ECDSA对一个当前时间戳+get_flag进行签名的结果，输入正确获得flag。我们发现在签名过程中除了明文以外所用的参数都没有发生更改，所以我们可以使用k共享的方式对改签名进行攻击。其原理如下

已知ECDSA的签名过程是，所以当我们有两组同参数的签名明文hash1,hash2和签名值(r,s1),(r,s2)，那么,。]]></description><category></category></item><item><title><![CDATA[libc 2.27 堆管理机制]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/108319252</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/108319252</guid><author>zhang14916</author><pubDate>Tue, 06 Oct 2020 20:58:10 +0800</pubDate><description><![CDATA[由于在libc2.26之后引入tcachebins，所以堆分配机制和之前不太相同

tcachebins——tcachebins是一个长度为64的字节数组，每个字节数组对应一条链表。所以tcachebins只能存放0x0-0x400大小的堆，且每个链表长度为7。并且类似于fastbins，是一个单链表。在释放大小为0x0-0x400大小的堆的时候，首先会被释放入对应长度tcachebins对应的链表中，当长度超出7后，再放入fastbin或unsortbins中。malloc的时候当发现malloc对应大小]]></description><category></category></item><item><title><![CDATA[burpsuite简介]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/86623667</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/86623667</guid><author>zhang14916</author><pubDate>Tue, 11 Aug 2020 15:55:43 +0800</pubDate><description><![CDATA[1 burpsuite简介

burpsuite作为web渗透较为常用的软件，有着9个比较常用的模块——proxy，target，intruder，comparer，repeater，decoder，extendere，sqlmap，csrf。下面将对这九个模块进行一一介绍

1.1 proxy

proxy代理模块是BurpSuite的核心功能，作为一个在浏览器和目标应用程序之间的中间人，允许你...]]></description><category></category></item><item><title><![CDATA[一些关于程序内存布局的问题]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/107631055</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/107631055</guid><author>zhang14916</author><pubDate>Tue, 28 Jul 2020 17:43:13 +0800</pubDate><description><![CDATA[1.栈

栈大小是有默认值的，当申请的临时变量太大或者函数调用深度过深会导致程序的栈空间不够用。这时我们需要修改栈大小

1．Linux系统：

ulimit -a #显示当前用户的栈大小

ulimit -s 32768 #将当前用户的栈大小设置为32M bytes

2. Windows (在编译过程中的设置)：

1). 选择 "Project-&gt;Setting".

2). 选择 "Link".

3. 选择 "Category"中的 "Output".

3. 在 "Stack alloca]]></description><category></category></item><item><title><![CDATA[给docker中的ubuntu系统安装桌面程序]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/107593330</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/107593330</guid><author>zhang14916</author><pubDate>Sun, 26 Jul 2020 15:11:47 +0800</pubDate><description><![CDATA[原本服务器是centos的，用的不是很习惯，也为了可以分割功能，于是在服务器上装了docker，docker里装了ubuntu系统，具体过程可以参见https://blog.youkuaiyun.com/hpf247/article/details/80078240中的内容。但是这样只能连到一个命令行，用的还是不习惯，于是找了一个给linux系统安装桌面程序方法使得我们可以远程访问docker中的桌面

由于远程桌面访问必须要打开端口3389，所以在启动docker中linux系统的时候要首先将linux系统的3389]]></description><category></category></item><item><title><![CDATA[linux-pthread-多线程编程]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/107311878</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/107311878</guid><author>zhang14916</author><pubDate>Mon, 13 Jul 2020 14:31:12 +0800</pubDate><description><![CDATA[线程按照其调度者可以分为用户级线程和核心级线程两种
用户级线程主要解决的是上下文切换的问题，它的调度算法和调度过程全部由用户自行选择决定，在运行时不需要特定的内核支持；
我们常用基本就是用户级线程，所以就只总结一下POSIX提供的用户级线程接口；
基本线程操作相关的函数：1线程的建立结束
2线程的互斥和同步
3使用信号量控制线程
4线程的基本属性配置

基本线程操作：

函数
			说明
			函数声明
			返回值
			参数
		pthread_start()
			创建线程开始运行相关...]]></description><category></category></item><item><title><![CDATA[C++ stl 算法]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106929876</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106929876</guid><author>zhang14916</author><pubDate>Fri, 26 Jun 2020 20:27:07 +0800</pubDate><description><![CDATA[1.概述

对于C++的stl，除了一些基本结构和一些自带的函数，还有着大量的使用函数模板实现的算法支持stl。这些算法主要由&lt;algorithm&gt;,&lt;numeric&gt;组成。要使用stl的算法函数要包括头文件&lt;algorithm&gt;，对于数值算法要包含&lt;numeric&gt;

2常用算法简介

2.1排序算法

sort(),stable_sort()——对全体元素排序，不同的是stable_sort()会保证相等的元素的相对关系
	partial_sort()：对]]></description><category></category></item><item><title><![CDATA[c++ stl set]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106835433</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106835433</guid><author>zhang14916</author><pubDate>Tue, 23 Jun 2020 18:37:03 +0800</pubDate><description><![CDATA[1.定义

set，就是数学上的集合——即set中的每一个元素只能出现一次，并且set中的元素是已经从小到大排好序的，使用set需要引入头文件#include&lt;set&gt;

2.基本函数

2.1构造函数

std::set&lt;int&gt; se：创建一个空的set
	std::set&lt;int&gt; se{1,2,3,4,5}：创建一个拥有元素1，2，3，4，5的set
	std::set&lt;int&gt; se1(se)：创建一个和se相同的set
	std::set&lt;i]]></description><category></category></item><item><title><![CDATA[python 逆向浅析]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106784433</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106784433</guid><author>zhang14916</author><pubDate>Wed, 17 Jun 2020 13:27:01 +0800</pubDate><description><![CDATA[1.编译过程简介

python是一种解释性的语言，其原理是将代码块按照需求边运行边翻译给机器执行。python运行原理就是首先把python源文件解释成pyc二进制文件，然后再将pyc文件交由python虚拟机直接运行。但是有时候我们在运行的过程中并没有pyc文件。通常在默认编译的情况下，只有被调用库文件会生成pyc文件保证代码重用，主文件不会生成pyc文件。我们可以通过使用-m参数生成pyc文件

2.python逆向

在这里我们不详述pyc文件格式。由于在pyc文件中对字节码做了处理。我们使用库对p]]></description><category></category></item><item><title><![CDATA[C++ stl map]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106768841</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106768841</guid><author>zhang14916</author><pubDate>Tue, 16 Jun 2020 11:14:34 +0800</pubDate><description><![CDATA[1.定义

map是一类关联容器，他提供一对一的数据处理能力。它的特点是增加和删除节点对迭代器的影响很小。而且map可以修改实值，而不能修改key。注意使用需要加头文件#include&lt;map&gt;

2.基本函数

2.1.构造函数

std::map&lt;int,int&gt; ma1：创建一个空的map。
	std::map&lt;int, int&gt; ma1{ { 0, 0 }, { 1, 2 }, { 2, 3 } }：创建一个拥有元素{0，0}，{1，2}，{2，3}的map
	s]]></description><category></category></item><item><title><![CDATA[C++ stl list]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106764133</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106764133</guid><author>zhang14916</author><pubDate>Mon, 15 Jun 2020 18:17:23 +0800</pubDate><description><![CDATA[目录

1.定义

2.基本函数

2.1.构造函数

2.2.添加元素

2.3.删除元素

2.4.list重要的迭代器

2.5.list其他函数

3.list使用实例

1.定义

list是C++ stl中的部分内容，本质上list容器就是一个双向链表，可以高效的插入删除元素。使用的时候需要添加头文件#include&lt;list&gt;

2.基本函数

2.1.构造函数

std::list&lt;int&gt; li：创建一个空的list
	std::list&lt;int&gt; li]]></description><category></category></item><item><title><![CDATA[HSCTF-部分writeup]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106597866</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106597866</guid><author>zhang14916</author><pubDate>Sun, 07 Jun 2020 17:57:13 +0800</pubDate><description><![CDATA[1.XORed

根据题意，我们很容易发现这是一个异或加密，根据异或的运算法则，我们很容易解密，下面是我们的writeup


Key1 = 0x5dcec311ab1a88ff66b69ef46d4aba1aee814fe00a4342055c146533
Key13 = 0x9a13ea39f27a12000e083a860f1bd26e4a126e68965cc48bee3fa11b
Key235 = 0x557ce6335808f3b812ce31c7230ddea9fb32bbaeaf8f0d4a]]></description><category></category></item><item><title><![CDATA[defcon-ctf qualifer crypto writeup]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106389070</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106389070</guid><author>zhang14916</author><pubDate>Fri, 29 May 2020 16:17:01 +0800</pubDate><description><![CDATA[ooo-flag-sharing

阅读题目，我们发现这是一个密钥分享的密码系统。题目使用100*5的矩阵A对填充为5*1明文向量C(向量第一个数是明文)加密得到100*1的向量B。在系统中保存部分向量数据b1,b2……，并将剩下的向量数据b3,b4……分发。当我们和系统由于5个向量数据b1,b2,b3,b4,b5。我们就可以将A中对应向量行组合成一个新矩阵，并求得逆矩阵。我们将的第一行(s1,s2,s3,s4,s5)和密文向量(b1,b2,b3,b4,b5)相乘即为明文。
...]]></description><category></category></item><item><title><![CDATA[2020-网鼎杯部分writup-3]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106239146</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106239146</guid><author>zhang14916</author><pubDate>Wed, 20 May 2020 16:51:17 +0800</pubDate><description><![CDATA[1.simple

根据下载题目提示，这可能是一个仿射编码，根据仿射密码求解


import gmpy2
miwen="kgws{m8u8cm65-ue9k-44k5-8361-we225m76eeww}"
minwen=""
k=8
b=22

for i in miwen:
    if ord(i)&gt;=ord('a') and ord(i)&lt;=ord('z'):
        miwenint=ord(i)-ord('a')
        for j in xrange(26):
 ]]></description><category></category></item><item><title><![CDATA[2020——网鼎杯部分writeup]]></title><link>https://blog.youkuaiyun.com/zhang14916/article/details/106102692</link><guid>https://blog.youkuaiyun.com/zhang14916/article/details/106102692</guid><author>zhang14916</author><pubDate>Wed, 13 May 2020 17:41:45 +0800</pubDate><description><![CDATA[1.you raise me up

题目源码如下


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Crypto.Util.number import *
import random

n = 2 ** 512
m = random.randint(2, n-1) | 1
c = pow(m, bytes_to_long(flag), n)
print 'm = ' + str(m)
print 'c = ' + str(c)

# m = 3911]]></description><category></category></item></channel></rss>