<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ytj00的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ytj00</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ytj00]]></copyright><item><title><![CDATA[django.db.utils.OperationalError: (1045, “Access denied for user ‘root‘@‘localhost‘ (using password:]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/126862608</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/126862608</guid><author>ytj00</author><pubDate>Wed, 14 Sep 2022 23:43:48 +0800</pubDate><description><![CDATA[解决：django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: NO)")]]></description><category></category></item><item><title><![CDATA[加密算法--RC4]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/119039366</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/119039366</guid><author>ytj00</author><pubDate>Fri, 23 Jul 2021 17:41:20 +0800</pubDate><description><![CDATA[RC4在ctf中经常出现，RC4算法比较简单，这里做一下总结


RC4加密是一种对称加密算法。所谓对称加密是指：采用单钥密码系统的加密方法，同一个密钥可以同时用作信息的加密和解密，这种加密方法称为对称加密，也称为单密钥加密。
简而言之，就是：加密过程和解密过程相同，使用同一个密钥就可以在密文和明文之间转化



c=RC4(key,m)
m=RC4(key,c)



RC4是一种流加密算法。流加密，是对称加密算法的一种，加密和解密双方使用相同伪随机加密数据流（pseudo-randomstream）作为]]></description><category></category></item><item><title><![CDATA[nctf复现 re1]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/110253342</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/110253342</guid><author>ytj00</author><pubDate>Sat, 28 Nov 2020 01:43:32 +0800</pubDate><description><![CDATA[彩笔一个，还请大佬多多指正
这道题说简单也不简单，有点小难度，主要是他的代码混淆太恶心了
首先ida打开，f12关键字，转到main函数

底下wrong的地方进行判断，把数据弄下来
a=[0xC6, 0x6A, 0xC0, 0x27, 0xEB, 0xCA, 0x65, 0x02, 0x61, 0xCA, 
  0x68, 0x27, 0x6B, 0xE2, 0xC0, 0xE0, 0x00, 0x80, 0x22, 0x27, 
  0xE1, 0xA1, 0x02, 0x27, 0x63, 0x4B,]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录25 [WUSTCTF2020]funnyre]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107735151</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107735151</guid><author>ytj00</author><pubDate>Sat, 08 Aug 2020 21:54:15 +0800</pubDate><description><![CDATA[太巧了，昨天刚看了有关angr的视频今天就碰到有关的题目了
这道题考察两点吧：1.简单的花指令去除 2.在有限域上简化
无壳，ida64打开，发现不能f5，而且也没有main函数，判断应该是用了混淆
从上往下看汇编代码，找到第一处问题

这里jz和jnz一看就有问题，下面的数据也是胡扯，然后下面的这些没标红的地方都是一个样

应该吧上面错误的地方改成下面的样子，大概有四五处吧，nop掉，p声明函数，得声明两处
然后f5得到反编译


定义了300多个变量，进行了好多好多运算，直接算肯定是算不出来的，
然后就]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录24 equation]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107735130</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107735130</guid><author>ytj00</author><pubDate>Sat, 08 Aug 2020 21:52:55 +0800</pubDate><description><![CDATA[这道题又一次加强了我的z3
题目有个html打开得到

根据题目提示这个是f**k加密
可以到在线网站上一个个去解密，但是太麻烦了，用了个网上的脚本，

得到

最后有一个常量没解，放到上面网站解出81
头疼，全是解方程，可以用z3来解
构造脚本麻烦死了，
from z3 import *

if __name__ == "__main__":
    s = Solver()

    l = [Int('l[%d]' % i) for i in range(42)]     #定义l[0] - l[41]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录23 [ACTF新生赛2020]Oruga]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107735105</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107735105</guid><author>ytj00</author><pubDate>Sat, 08 Aug 2020 21:52:44 +0800</pubDate><description><![CDATA[无壳，拖进ida，

然后进入sub_78A这个关键函数里去看，有点迷宫的感觉，起点为（0,0）


这里”0“是我们移动停止的条件，注意v2+=v4这一句，由于这是在while循环里的，所以他是一直以同一个方向移动的，直到碰到了非0的东西，很类似于象棋里面的车，但一次必须走到头
进入数据word_201020看

然后构造脚本，画出来这个迷宫，
#include &lt;stdio.h&gt;
char maze[256] = {
    0x00, 0x00, 0x00, 0x00, 0x23, 0x0]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录22 [WUSTCTF2020]level4]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107735063</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107735063</guid><author>ytj00</author><pubDate>Sat, 08 Aug 2020 21:52:31 +0800</pubDate><description><![CDATA[无壳，ida打开，

上网查了查traversal

然后看到最上面上面有左右指针，感觉有点像二叉树遍历
打开type1和type2


结合两个函数，第一个应该是中序遍历，第二个应该是后序遍历
然后去找字符串，找半天没找到，就运行一下看看会不会出来

这样一道re题就变成了一道数据结构题，画出来这个二叉树

wctf2020{This_IS_A_7reE}，真费劲
flag为： flag{This_IS_A_7reE}

...]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录21 [网鼎杯 2020 青龙组]jocker]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734999</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734999</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:42:15 +0800</pubDate><description><![CDATA[今天挑战一下，结果最后还是看了别人的wp才写出来的
无壳，ida查看发现不能f5，原因堆栈不平衡

进行栈指针修改


修改出错的地方的栈指针偏移，快捷键alt+k，值改为0



然后就能f5了，

逻辑也不难，首先输入长度是24位，然后有三个关键函数 wrong（），omg（），encrypt（）
先看wrong和omg，wrong函数，对输入的前24个进行加密

omg函数比较wrong加密结果和unk_4030C0地址的值是否相同

把unk_4030C0地址的值考出来，写个脚本
s=[102, 1]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录20 [ACTF新生赛2020]Universe_final_answer]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734962</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734962</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:34:35 +0800</pubDate><description><![CDATA[无壳，进入ida，函数逻辑挺简单的，但是这个算法我是真没见过

网上查了查，这些题用z3库来写，顺便学了学怎么用这个库
from z3 import *

s = Solver()
v1 = Int('v1')
v2 = Int('v2')
v3 = Int('v3')
v4 = Int('v4')
v5 = Int('v5')
v6 = Int('v6')
v7 = Int('v7')
v8 = Int('v8')
v9 = Int('v9')
v11 = Int('v11')

s.add(-85 * ]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录19 buuctf  FindKey]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734901</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734901</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:30:20 +0800</pubDate><description><![CDATA[个人感觉这个题出的不好，md5根本找不到（是我太菜）
经典无壳，拖进ida，f12找到关键字符串，发现左边地址是红色的，应该是用了花指令，果然

两个一样的指令连在一起，把下面的去掉，按p声明函数，再f5看反编译

程序逻辑并不是太难，有两处关键运算和一个关键判断
第一个关键运算是将输入的pbdata与v16进行异或，最后与v20进行比较

逻辑很简单，直接写脚本，得到第一个字符串：c8837b23ff8aaa8a2dde915473ce0991
然后如果直接按照第二个关键运算算的话，算不出来
看别人的wp]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录18 [WUSTCTF2020]level3]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734841</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734841</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:27:10 +0800</pubDate><description><![CDATA[经典无壳，拖进ida

最后输出的里面有衣穿加密字符串，一看就知道是base加密的，然后提上又提示是base64加密，拿去解密发现不对，感觉应该是吧base64的码表改了
然后找半天没找到那个函数，

然后找到这个奇怪的函数，果然是吧码表换了

写出脚本，得到改变的码表

然后根据之前的加密字符串，再写脚本
import base64
import string

str1 = "d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=="

strin]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录17 [GUET-CTF2019]number_game]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734742</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734742</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:20:50 +0800</pubDate><description><![CDATA[ida打开进入主函数

先看第一个if里面的函数

首先是判断输入长度是否为10，然后逐个检查输入的字符是否是在0到4之间
然后我们看主函数中第二个if里的函数sub_400917


自己看没看懂…看了看别人的wp才知道这是个数独游戏（第一次接触这种题），这个是个5*5的数独游戏其中行和列都不能有重复的
14#23
30#1#
0#23#
#3##0
42##1

就是这个样子，不考虑中间那些函数，我们应该输入0421421430，输入以后不对，应该是中间的函数做了某些调换或者其他操作
然后，sub_40]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录15 [FlareOn6]Overlong]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734647</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734647</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:11:53 +0800</pubDate><description><![CDATA[这道题挺迷的，看了别人的wp才知道有这种出题方式
没有加壳，ida打开只有三个函数

main函数也特别简单，就是v4先读取unk_402008这个地址的数据，读28位，经过sub_401160函数的运算
然后给了text，最后输出text
然而问题点就是unk_402008不止28个
一共有175个数据（b7-08）
再结合

怀疑他没有处理后面的数据，于是想到去修改这个程序，让他读175位
这里没有用ida，因为改完以后我不会保存
用od去改，相对应的机械码，直接修改二进制码

机械码为 6A 1C

]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录14 [GKCTF2020]BabyDriver]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734585</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734585</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:08:56 +0800</pubDate><description><![CDATA[迷宫题的新花样
打开感觉就是个迷宫题

然后

根据判断条件，#应该是终点，o应该是起点

有了迷宫了，就差上下左右走的条件了，这里我看了好长时间没看出来
，看了别人的wp才知道这里由于是sys文件，是由键盘过滤驱动获取键盘扫描码来控制上下左右，而不是ascll码
第一次知道

很容易就知道上下左右分别是IKJL
所以路径为LKKKLLKLKKKLLLKKKLLLLLL
题里面又提示flag是其路径的md5的32位小写，故得到flag：
flag{403950a6f64f7fc4b655dea6969978]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录13 [HDCTF2019]Maze]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734526</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734526</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 18:04:51 +0800</pubDate><description><![CDATA[第一次接触花指令，搞了一下午才弄懂
查壳，是upx加壳，脱壳后，拖进ida，发现无法f5

可以看出这应该是关键代码的一部分。
这里jnz跳转到了下一行代码，相当于没跳转

没什么用，而下面的call near ptr 0EC85D78Bh调用了一个不是地址的地址，可以推断出这段代码添加了花指令，IDA分析失败了。
可以确定这个jnz指令是花指令，还有下面的call指令。
先将jnz指令nop掉。

然后这个call还是有问题
之后就是这个call指令，不能全部nop，因为后面那个东西可能是有效代码。摁d将]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录12 [FlareOn4]IgniteMe]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107734462</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107734462</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 17:59:14 +0800</pubDate><description><![CDATA[没有加壳，打开

有两个关键函数，sub-4010f0和sub-401050

看到两个’\n’,’\t’猜想这个sub-4010f0函数应该是进行输入和排除掉’\n’,’\t’
再看sub-401050：

sub_401050函数就是将字符串逆向做了异或操作之后，与已知字符串byte_403000对比。
关键是这里的v4

从代码不好直接求出来，动调查看
这里的a1就是v4，可以看到是4
脚本：
#include &lt;stdio.h&gt;
int main()
{
	int i;
	char v4]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录11 [MRCTF2020]Transform]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107695009</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107695009</guid><author>ytj00</author><pubDate>Sat, 01 Aug 2020 17:54:30 +0800</pubDate><description><![CDATA[查壳后无壳，ida打开，逻辑很简单

根据最后的判断条件可以反推

说明一点，dup是
所以上面dword_40f040最后那个 8 dup(0) 的数据不是8，而是零（我之前按照8搞的一直是错的）
#include &lt;stdio.h&gt;
int main()
{
int i;
char c[33];
char a[]={0x09,0x0a,0x0f,0x17,0x07,0x18,0x0c,0x06,0x01,0x10,0x03,0x11,0x20,0x1d,0x0b,0x1e,0x1b,0x16]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录10 [ACTF新生赛2020]usualCrypt]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107694610</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107694610</guid><author>ytj00</author><pubDate>Thu, 30 Jul 2020 17:19:01 +0800</pubDate><description><![CDATA[ida打开，进入main函数

有一个关键函数，和一个关键比较
先进入关键函数里面


最开始有一个sub_401000()函数，进入后


感觉有点像base64加密，然后这个函数是变换base64的码表，写脚本将变换后的码表求出来
#include &lt;stdio.h&gt;
int main()
{

char b[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char c;
int i=6;
print]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录9 [BJDCTF2020]BJD hamburger competition]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107694515</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107694515</guid><author>ytj00</author><pubDate>Thu, 30 Jul 2020 17:07:42 +0800</pubDate><description><![CDATA[打开看是一整个程序，刚开始感觉和那个坦克大战有点像（小憨包笑死）
怀疑是根据选择不同的材料来达到某种条件然后输出flag
先找到c#的资源文件

dnspy打开
点开以后


果然是根据根据点击材料来控制是否输出flag，但是直接看最后几段代码，发现flag先sha1加密进行判断，再输出时md5加密
根据他的数据可以反推出str，进而求解flag

str为1001，md5加密

都试了一遍以后发现都不对，再看看代码

他这个md5加密是取得前20个字母，Substring是截取字符串，Tostring（“]]></description><category></category></item><item><title><![CDATA[buuctf刷题记录8 [ACTF新生赛2020]rome]]></title><link>https://blog.youkuaiyun.com/ytj00/article/details/107694353</link><guid>https://blog.youkuaiyun.com/ytj00/article/details/107694353</guid><author>ytj00</author><pubDate>Thu, 30 Jul 2020 17:03:43 +0800</pubDate><description><![CDATA[ida打开，逻辑很清晰
 v15 = 81;
  v16 = 115;
  v17 = 119;
  v18 = 51;
  v19 = 115;
  v20 = 106;
  v21 = 95;
  v22 = 108;
  v23 = 122;
  v24 = 52;
  v25 = 95;
  v26 = 85;
  v27 = 106;
  v28 = 119;
  v29 = 64;
  v30 = 108;
  v31 = 0;
  printf("Please input:");
  scan]]></description><category></category></item></channel></rss>