循环神经网络
编码器即把自然语言转化为向量(一般为二维),解码器即把特征向量转化为人类可阅读的语言
注意力机制到底是什么——基于常识的基本结构介绍 - 李鹏宇的文章 - 知乎
用于自动学习中计算数据对输出数据的贡献大小,即有选择性地处理信号
特征工程就是选择和目标最有关系的特征,减少工作量。一般的特征工程为各个特征赋予固定权值,而注意力机制让模型自己学习如何分配注意力(特征加权)。
注意力机制位于编码器和解码器之间,用于计算各个输出向量对解码器每一个输出的影响程度
$W_1 = (w_{1,1},w_{1,2},w_{1,3},w_{1,4})$
$w_{i,j}=g(y_i,z_j)$
$C_1=\begin{bmatrix}W_1\W_1\W_1\W_1\end{bmatrix}*\begin{bmatrix}z1\z2\z3\z4\end{bmatrix}$
$y_1=f_{de}(c1,y_0)$
直到解码器输出了<end>标签。
让解码器根据自身历史输出计算$y_i$与$Z$的相关性,即可得到$W$矩阵
可以看出,注意力机制增加了额外的运算量,降低了推理速度。
BERT大火却不懂Transformer?读这一篇就够了 - 数据汪的文章 - 知乎
https://zhuanlan.zhihu.com/p/54356280
用放大镜看Transformer——总体和各个模块的结构到底是什么样的 - 李鹏宇的文章 - 知乎
https://zhuanlan.zhihu.com/p/122977440
Transformer结构示意图
编码-解码器结构,其中编码器和解码器都利用了类似RNN的时间循环结构。由编码组件、解码组件和它们之间的连接构成。
Transformer会利用上一时刻的输出和当前时刻的输入
编码组件由一堆编码器构成,解码组件由相同数量的解码器构成。
编码器结构上相同,之间未共享参数。每个编码器都可以分解成两个子层:前馈神经网络层和自注意力层。
输入是向量列表,列表大小是可以设置的超参数。
自注意力曾中,各个词有互相连接,互相影响;前馈神经网络曾无相互连接和相互影响,可以并行进行。每一个单词的前馈神经网络完全相同。
自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。
可以用矩阵运算以加快运算速度
这样得到的向量就可以传给前馈网络了
注意力头:使用几个不同的查询/键/值矩阵,计算不同的结果,然后使用一定的方法合并输入到前馈层
使用正弦函数进行位置编码
每个编码器中每个子层之间都有一个残差连接,并且都跟随着一个层归一化步骤。相应地,解码器也有这些结构。
编码器通过处理输入序列开启工作。顶端编码器的输出之后会变转化为一个包含向量K(键向量)和V(值向量)的注意力向量集 。这些向量将被每个解码器用于自身的“编码-解码注意力层”,而这些层可以帮助解码器关注输入序列哪些位置合适
解码器最终输出一个实数,然后会进行线性变换,再到softmax层W
GPT——生成式预训练Transformer - 李鹏宇的文章 - 知乎
https://zhuanlan.zhihu.com/p/125139937
基于Transformer的双向编码器表示(BERT)——结构和训练 - 李鹏宇的文章 - 知乎
https://zhuanlan.zhihu.com/p/125655365
alias
1 | alias alia="cmd" |
为某个命令指定别名,可以带参数
1 | alias gnome-screenshot="gnome-screenshot -i" |
让截图工具默认以交互方式截图而不是直接截取全屏
arander图形化的显示器调整工具
xrander命令行显示器调整
1 | pacman -S texlive-most texlive-lang |
1 | # Moving workspaces between screens |
这条配置可以更改workspace所在屏幕
就做了一道题拿了1血,后面就忘记做了,复现学到东西的题
hook了一个从ring3到ring0的函数,所以v9调用的其实是自己的函数。
通过调试没找到那个函数,只能在函数列表一个一个寻找(也可以过滤函数长度,找了一下不是库函数就是直接jmp的函数,所以应该很容易过滤)
找到了sub_412A20,其中有ZwSetInformatinoThread反调试,这个函数如果执行到最后恰好返回0x7ff,我tm直接nop反调试
然后加载了一个资源文件并且解密,然后是sm4加密
1 |
|
异常虚拟机
通过SetUnhandledExceptionFilter进行了无效指令的处理和反调试,SetUnhandledExceptionFilter主要通过ZwQueryInformationProcess查询调试器,可以patch掉ZwQueryInformationProcess的代码,具体是在ZwQueryInformationProcess下断点,断下时如果第二个参数为7,infoClass=7,就回溯到调用者函数,把je改为jmp
https://www.cnblogs.com/zpchcbd/p/12079166.html
反汇编脚本
1 |
|
patch程序方法:可以先都patch成0x90,这样就可以patch 汇编了。更好的方法当然是使用一个汇编引擎(已知pwntools)
patch之后就可以直接f5了(~ ̄▽ ̄)~(~ ̄▽ ̄)~(~ ̄▽ ̄)~(~ ̄▽ ̄)~(~ ̄▽ ̄)~
1 | char sub_4018F0() |
首先是一个群上面的移位,然后整体循环左移3位,最后是简单的异或处理
1 |
|
既然是child_protect,直接找CreateProcess,交叉引用找到了父进程主函数sub_413670,然后pid交叉引用找到了DebugActiveProcess,sub_413D10下面是主进程对子进程进行处理的函数sub_411415
查了一下GetLastError的ErrorCode,183恰好是文件已存在,也就是说父子进程通过这个判断自己的身份
根据父进程patch子进程,得到流程是先异或再byteswap再tea再byteswap
1 |
|
主要使用requests和BeautifulSoup库,BeautifulSoup使用CSS过滤器
1 | # encoding=utf-8 |
其中tokenize后每个词用一个向量表示,一个句子是一个二维矩,使用TF-IDF提取出句子中的关键词,所以训练的时候输入到每个句子中就是一个一维向量
最后投票的方式就是认为是正面的概率两个模型求平均,认为是负面的求平均,就实现了投票操作
https://github.com/NLP-LOVE/Introduction-NLP/blob/master/chapter/
去掉无意义的词可以优化分词效果
序列标注模型
序列标注模型
数据集可以区tweeter上爬取,貌似有官方API。数据集进行了一些预处理,去除了无关紧要的符号和链接等。
测试数据集参考文献.M. Mohammad, F. Bravo-Marquez, M. Salameh, S. Kiritchenko, SemEval-
2018 task 1: Affect in tweets, in: Proceedings of International Workshop
on Semantic Evaluation (SemEval-2018), New Orleans, LA, USA, 2018.
采用Best–Worst Scaling方法对数据进行手动标注,避免数据内部和数据之间的矛盾。但是还有个强度量使用0-1之间的数值进行标注。
训练时数据集分三份,一份训练,一份development(用于评估模型的性能),一份test-gold,test-gold用于排名各个队伍。
使用Sentence BERT提取属性,使用CrystalFeel情感分析。优于一元分词(一个字看成一个向量)和二元分词(使用条件概率进行分词)。
使用Pearson correlations(皮尔逊相关系数)评测模型准确率。
这篇论文还测试了逻辑回归、随机森林、SVM等情感分类方法。对于葡萄牙语,另外使用了使用朴素贝叶斯,多层感知器,梯度上升等方式。
使用GSDMM识别topic,给出一个topic集合。一个消息只能有一个topic。topic分类的同时指出句子中关于这个topic的单词。
fastText文本分类方法。
架构
Liu, X., Hu, W., 2019. Attention and sentiment of Chinese public toward green buildings based on Sina Weibo. Sustain. Cities Soc. 44, 550–558. https://doi.org/10.1016/j.scs.2018.10.047
Wang, Y., Li, H., Wu, Z., 2019. Attitude of the Chinese public toward off-site construction: a text mining study. J. Clean. Prod. 238, 117926. https://doi.org/10.1016/j.jclepro.2019.117926
使用软件Linguistic Inquiry and Word Count (LIWC)进行分词、还原词根等预处理操作
没有正则化文本,而是正则化了情感分析的结果数值
使用lexion-based方法提取关键词
Pennebaker, J. W., & Francis, M. E. (1996). Cognitive, emotional, and language processes in disclosure. Cognition & Emotion, 10(6), 601–626
通过寻找表达情感的词的数量来进行情感分析,字典也是用LIWC的。$\frac{积极/消极情感词数量}{单词总量}$
https://zhuanlan.zhihu.com/p/165863653
https://easyai.tech/ai-definition/
NLP两个任务:NLU(机器理解人),NLG(人理解机器)
NLU处理流程
传统
语料预处理>特征工程>选择分类器
深度学习
预料预处理>设计模型>训练模型
英文语料预处理
英文语料预处理
Transformer是目前NLP最先进的方法,用于语义特征提取
分词是非结构化数据结构化的第一步,词是表达完整含义的最小单位,字含的信息太少,句子信息量太大。
中英文分词有一定的区别
分词方法
步骤
还有个停用词去除,即去除无关紧要的词。
https://x-nagi.com/post/starctf2021.html#1rep
https://www.anquanke.com/post/id/229322
github上有官方wp
注入技术在外挂、热修复技术中非常常见,由于Android使用Linux内核,所以先实现Linux下ptrace注入,后面再逐步改为Android版本
1 |
|
这里打印各个函数的地址,便于出问题的时候debug
1 |
|
使用下面的命令编译为so文件
1 | gcc -o libtest.so test.c -fPIC -shared |
1 |
|
https://xz.aliyun.com/t/5361?spm=5176.12901015.0.i12901015.2ad3525c5zq8Kz 一直跟着这个教程学的
https://man7.org/linux/man-pages/ linux的手册真的挺详细的
https://github.com/qhungngo/EVBCorpus
来自于 https://sites.google.com/a/uit.edu.vn/hungnq/evbcorpus
https://github.com/facebookresearch/XNLI
https://github.com/facebookresearch/XNLI
https://www.aclweb.org/anthology/D18-1269/
XNLI 将 NLI 数据集扩展到 15 种语言,包括英语、法语、西班牙语、德语、希腊语、保加利亚语、俄语、土耳其语、阿拉伯语、越南语、泰语、中文、印地语、斯瓦希里语和乌尔都语,并以 NLI 的三分类格式为每种语言分别提供了 7500 个经人工标注的开发和测试实例,合计 112500 个标准句子对
https://download.csdn.net/download/weixin_41781408/11161362
有些国家提供了中越双语的网页,可以爬取
https://www.bing.com/search?q=%E4%B8%AD%E6%96%87+site%3Avn&mkt=zh-CN
http://catalog.elra.info/en-us/repository/browse/ELRA-W0124/
http://opus.nlpl.eu/Wikipedia.php
https://www.kaggle.com/search?q=Vietnam
这个可以搜索其他的
这个网站所好像有所有语言的语料库,有点不懂,难道是自己翻译的?
http://www.language-archives.org/
这个网站也是所有语言都有,但是没看懂怎么下载
http://www.arts.chula.ac.th/ling/tnc/
泰国国家语料库,泰语。 来自于 http://pioneer.chula.ac.th/~awirote/ling/corpuslst.htm
建立工程文件夹,工程文件夹内建立jni文件夹
进入jni文件夹
创建源文件,Android.mk,Application.mk
Android.mk
1 | # 一个Android.mk file首先必须定义好LOCAL_PATH变量。 |
fpid是你的目标文件名,1.c是源文件名
Application.mk
1 | #### APP_ABI := arm64-v8a 后面接的是需要生成的.so平台文件, |
然后进入工程目录执行
1 | ndk-build |
在libs目录下可以找到编译好的文件,使用adb push命令可以送到手机
主要是利用了linux的文件系统,/proc存储着进程有关信息
1 |
|
步骤
64位注入器
1 |
|
32位注入器
1 |
|
要注入的so文件编译
Android.mk
1 | LOCAL_PATH:=$(call my-dir) |
Application.mk指定架构即可
hook.c
1 |
|
这里init可以作为Android的.init段,在so加载时执行
[1] https://www.jianshu.com/p/c546783ad284
[2] https://xz.aliyun.com/t/5361?spm=5176.12901015.0.i12901015.583e525cW8q5ne