经过TFA(TongS Fitness Association ,童帅健康协会)成员的讨论协商,一致决定,由于之前的健身计划存在一些问题,制定并采用新的健身计划,制定过程如下
哑铃手臂轰炸
3D肩部轰炸
健身房力量强化·腿
腹肌撕裂者强化
家庭增肌特训·铠甲胸
全身拉伸
家庭增肌特训·V型背
哑铃手臂轰炸
腹肌塑造强化
羽毛球/游泳/拳击/跑步/休息 任选其一
TFA是TFA,下次制定新计划应该在应该制定新计划的时候,如果这次制定的计划合理应该可以坚持一个合理的时间,如果不合理那这次的计划一定是不合理的。
希望这次计划能让我得到更好看的身材,就像练完这次计划一样。
1 | sudo apt update && sudo apt upgrade |
然后打开Language Support和Additional Drivers安装中文支持和必要驱动
1 | sudo apt install i3 i3lock-fancy lightdm lightdm-settings |
1 | sudo apt install compton feh nm-applet python3-pip blueman policykit-1-gnome volumeicon-alsa xfce4-power-manager vim-gtk3 proxychains4 scrot |
1 | sudo pip install autotiling dmenu |
可选的组件包括spacevim,chromium挺好用的
然后需要删除所有其它桌面管理器的快捷键
scrot用于截屏,可以根据下面的配置文件语法自行设置快捷键
这是一份从manjaro-i3的配置文件中更改而来的文件,
1 | # i3 config file (v4) |
安装
1 | curl -sLf https://spacevim.org/cn/install.sh | bash -s -- -i vim |
配置文件
1 | #============================================================================= |
1 | wget https://dldir1.qq.com/music/clntupate/linux/deb/qqmusic_1.1.0_amd64.deb |
然后安装
1 | sudo dpkg -i *.deb || sudo apt install --fix-broken |
搜狗输入法环境变量,编辑/etc/profile,在末尾添加
1 | export GTK_IM_MODULE=fcitx |
1 | sudo apt autoremove gnome gnome-shell gnome-control-center |
编辑/etc/i3status.conf
1 | # i3status configuration file. |
原文链接 https://www.aclweb.org/anthology/2020.cl-1.2.pdf
小冰的设计有三个要点
小冰使用分层决策模型进行对话
上层马尔科夫模型决定小冰使用哪一个对话模型,然后进入下层决策
ubuntu16.04或ubuntu18.04,在镜像站中的ubuntu-releases目录下就有
buuoj Links->Resources网站可以吓到glibc2.23-2.31各个版本的
pip环境可能报错,可以尝试从bootstrap网站下载
1 | curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py |
版本不对应时会提示对应的版本链接
https://packages.ubuntu.com/xenial/glibc-source
1 | sudo apt install gdb gdbserver gdb-multiarch qemu qemu-kvm |
安装pwndbg https://github.com/pwndbg/pwndbg
1 | git clone https://github.com/pwndbg/pwndbg |
下载好glibc源码后解压,然后在gdb中设置源码搜索路径,为了方便也可以把这句话加入.gdbinit
1 | dir path_to_glibc |
vscode jupyter python c/c++插件
(直接看的题解)先穷举行,再穷举列,使用库函数可以在O(nlogn)时间复杂度内找到不超过k的数。C直接穷举列了。。
1 | int maxSumSubmatrix(int** matrix, int matrixSize, int* matrixColSize, int k){ |
对于有序的输入数组,dp[i]表示第i个数能与前面的数构成的最大整除序列。因为除数有这个性质:如果s|d,d|c则s|c,也就是说,若arr[j]与前面的数构成一个整除序列,且arr[j]|arr[i],则arr[i]可以与arr[j]序列中的所有数构成整除序列。这就是动态规划问题。
dp[i]初始化为1
dp[i]=dp[i]%dp[j]==0&&dp[j]>=dp[i]?dp[j]+1:dp[i];
为了记录构成最大数组的序列,还要使用last数组记录i的上一个
为了得到有序的输入,还要复习一下快排算法= =
1 | int qSort(int *arr,int start,int end){ |
最后时间比别人快,击败96%;内存消耗比较大,应该是两个40000的数组hhhh。换了malloc果然内存降下来了,剩下的内存消耗应该是快排递归和last数组了。
https://www.52pojie.cn/thread-1287476-1-1.html
第一次分析,详细看看步骤(虚拟机已断网)
下面 Sub Document_Open()是入口程序
被混淆了,复制代码之后使用automateexcel.com/vba-code-indenter 格式化一下,得到如下程序
1 | Option Explicit |
在 Sub Ducument_Open()下断点,点击运行后进入debug状态
F8单步步入,到Lethbridge中
然后视图->本地窗口,监视变量,之后一直单步步入,碰到循环就执行到光标处,直到ExitFunction前,观察到解密字符串 “winmgmts:\.\root\cimv2:Win32_Process”
搜索这个Win32_Process对象,https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-tasks--processes,得到这个对象主要用来创建进程、获取进程信息
后面这个字符串传入了GetObject,然后传入了SnottineSS函数
然后又解密了一个字符串,运行后得到
1 | "powershell -WindowStyle Hidden |
格式化一下
1 | # powershell -WindowStyle Hidden |
第一条命令运行一个ps1脚本
TODO 此处没调试到powershell的真实脚本?
直接使用文章里的
1 | powershell Hidden |
到了$z24c5732赋直接echo $z24c5732
,就得到了下面的cs代码
1 | using System;using System.Runtime.InteropServices;using System.Diagnostics;using System.IO;using System.Net; |
格式化之后
1 | using System.Runtime.InteropServices; |
可以使用VS的重命名把对应的系统函数重命名掉。y171e就是解密函数了。
实现的功能就是从对应的URL下载文件并执行。
找出最长解码方法
最可笑的是一年前提交过了,且速度很快。现在不会了。
这次添加了笔记,应该不会忘了吧
1 | int numDecodings(char * s){ |
火绒大大的文章 https://www.52pojie.cn/thread-1258730-1-1.html
感觉东西不多,但是没有样本不好操作。尝试了虚拟机安装,老毛桃直接找不到虚拟磁盘,看来是对这个做了优化啊。😂
https://www.52pojie.cn/thread-693641-1-1.html
先安装xdebug、vscode的PHP debug插件
https://github.com/nikic/PHP-Parser 使用这个格式化
然后单步调试,过掉反调试,一直到eval就可以看到源码
KMP算法一直没看懂,这次看看
前缀函数$\pi(i)$表示$s[0:i]$最长相等的真前缀和真后缀
对于字符串aabaaab
KMP算法是严格$O(m)$的,靠的就是前缀函数的几个性质
$\pi(i)\le\pi(i-1)+1$,直观地想,增加了一个字符之后最多增加一个真前缀和真后缀的相等的字符
如果$s[i]=s[\pi(i-1)]$,那么$\pi(i)=\pi(i-1)+1$,直观地想,这分别是是$\pi(i-1)$的真后缀的下一个字符,所以成立
这样就可以根据这两个性质求出$\pi(i)$,找到最大的$j$,满足$s[0:j-1]=s[i-j:i-1]$,且$s[i]=s[j]$,就得到$\pi(i)=j+1$
当$s[\pi(i-1)]\ne s[i]$时,$\pi(i)\le\pi(i-1)$,因为$j=\pi(i)-1$,所以$j\lt\pi(i)-1$,于是可以取(1)式两字串的长度为j的后缀,它们依然是相等的:$s[\pi(i-1)-j:\pi(i-1)-1]=s[i-j:i-1]$
实际上是一个有限状态自动机
接收到一个字符之后,如果和当前字符相等,就进入下一个字符的匹配,如果不相等,则依据当前状态和输入字符判断下一个状态是哪个,最终是一个有限状态自动机。
设要匹配的字符串为pat,原字符串为txt
构造状态转移矩阵dp,如果字符等于pat[j],则转移到下一个状态,否则就回退到和自己相同的最长前缀。
1 | int strStr(char * haystack, char * needle){ |
参考:
题解
52pojie链接 https://www.52pojie.cn/thread-1084019-1-1.html
没有搜到样本,后门流程如下:
这个作者的另一篇文章 https://www.52pojie.cn/thread-1074873-1-1.html
有样本,查看
1 | add_action('wp_head', 'wp_backdoor'); |
和这个一样的逻辑啊。。
混淆加密帖子 https://www.52pojie.cn/thread-1074918-1-1.html
PHP Debug+vscode+xDebug+php7.2+PHP 智能补全,单步调试到eval就可以看到主逻辑
php解密资料(zym加密)https://www.52pojie.cn/thread-693641-1-1.html
https://www.52pojie.cn/thread-1412858-1-1.html
没有给样本
可以使用Detous Hook反调试函数(新知识)
https://www.52pojie.cn/thread-1096117-1-1.html
解压后有个bat文件,然后使用批处理+ActiveX命令
流程:
过程中所有的输出均被重定向到NUL
前面输入了一大堆base64,输出后是个magic number为PK的文件,结合bat文件命令,这应该是一个zip压缩包
解压之后就是那个memz.exe了(只有15kb的病毒,很有前途啊)
exeinfope扫描,32位,无壳
getSystemMetics https://baike.baidu.com/item/GetSystemMetrics/5608817 获取屏幕分辨率,分别是x,y
病毒第一次运行,会创建10个自己,参数是/watchdog,然后以main参数运行,并退出程序
/watchdog参数下会最终拒绝关机,不断地衍生出更多进程,每次会等待10秒。如果进程减少了,获取关机权限
获取关机权限函数
1 | BOOL __usercall sub_401021@<eax>(int a1@<ebp>) |
监测数量部分
1 | while ( 1 ) |
向PhysicalDrive0写入几个奇怪的字节,0x7A0大小。看大佬分析是改变了扇区启动项。
然后创建线程,函数列表位于405130,共10个函数
1 | int __cdecl sub_4014FC(int a1) |
1 | int __cdecl sub_40156D(int a1, int a2) |
思路:先从后向前扫描相等的,直到数组空或遇到不相等的为止。然后从前向后扫描,直到遇到last为止。如果从前向后遇到要去除的数,则让last指向的数替换这个数,last前移,直到遇到下一个不相等的数为止
1 | int removeElement(int* nums, int numsSize, int val){ |