I hear the sound.

0%

背景

最近参与一个共同项目,在里面各种划水,抱着队友的大腿,自己主动挑一些边边角角的任务去做,显得好像自己也在参与一样(笑)。落脚点依然是自己的舒适区,好听点叫“提升工程效率”,说白了就是减轻(不知道有没有人去后续维护)的后续维护者的上手负担,以及减少(减少了他们也不一定看得出来的)用户使用项目成果的难度。

这次的具体需求是,要把Z3的java版本打包进可执行的jar里面,使得用kotlin写的工具能够方便地调用Z3接口。Z3调用部分的代码队友已经写好了,在自己的IDE上跑起来也顺风顺水,然而打包成jar就出问题了。原因是没有将native库打包进去,使得执行jar的时候无法加载到这些库。所以这篇文章就分享一下这次打包native库的经验。

阅读全文 »

前言

这是全网第一万篇关于这个问题的文章了,从stackoverflow、quora、medium,到知乎、简书、csdn,每个技术人员聚集的社区里面都能搜出一堆试图说明这些“版本”的文章、问答。于是大家,不管是不是真的理解,总归是会记住这么一条“金科玉律”:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

再细致一点的还会说到,minSdkVersion用于在应用商店中检查APK的最低运行版本,compileSdkVersion应该使用当前最新的版本,targetSdkVersion应该尽可能和compileSdkVersion保持同步。这个说法流传如此之广,以至于成了一种近乎标准答案的回答(另一个典型的例子是“进程是资源分配的最小单位,线程是cpu调度的最小单位”)。这种说法对于我来说依然是云里雾里的,所以我打算写一篇自己能看懂的文章(就是这篇)。这里不会像知乎标题党那样动辄“这一篇终于讲清楚了”,也没办法像码怪那样“答案都在源码里面”。写作的目的只是为了让自己理解,视角难免浅薄,如有错误,还望不吝指出。

阅读全文 »

起因是最近在工作中要对apk文件进行静态分析,发现对于进行加固的apk分析效果不甚满意。之后发现原因是这个apk进行过加固,入口被隐藏了,于是萌生出要对它进行逆向的想法。最后算是做出来了,也和老板说的一样,没什么学术价值,但很有成就感,说到底,会喜欢玩ctf也是这个道理吧。

阅读全文 »

以前用ubuntu用的风生水起的时候(实际上并没有),从没考虑过给idea或者是pycharm换终端。在ubuntu上正常使用的是fish,稍微有那么一点geek范。但回到IDE里面,用着ubuntu自带的bash也并无不适。

直到开始用windows工作时,才意识到无论cmd还是powershell都极其恶心。居然就以这种状态,还坚持了大半年。后来换了cmder,也就一并搜索并解决了换IDE终端的问题。

说白了就一行设置的事情,到底是为了多水一篇文章。回看发现发布上一篇竟然是一年前的事情了,不禁想起当初被年兽一语道破:“写博客不难,难的是坚持写博客。”

回到正题,设置路径是Settings -> Tools -> Terminal -> Shell path,加上一行:

"cmd.exe" /k ""C:\Program Files\cmder\vendor\init.bat""

路径也可以换成%CMDER_ROOT%\vendor\init.bat,但要设置环境变量。

永远不知道人无聊时能干出什么来

本来想只写一篇的,但是上一篇写完就想摸鱼了,于是急急忙忙发布出去,把剩下的内容留到这一篇。然而看完才发现,后面四篇的内容也不是很多。那这一篇的意义可能也就只是水多一篇博客了吧:)

这个教程一共有八篇文章,然而代码只给出了六个分类,看完之后发现代码少的是第5、6篇文章。这两篇文章,一篇是讲怎么在nasm下定义宏的,另一篇关于另一种汇编器gas的不同,以及诸如操作符位长这样的杂七杂八的东西,不是特别通用,也没有深入探讨,就稍微浏览一遍。作者也没有对这两篇教程写新的代码。这篇博文也就主要是最后两篇教程的内容。

阅读全文 »

这一篇博客是看了GitHub上一个x86_64汇编入门教程之后的小总结。

有点忘记是是什么时候看到这个系列的教程的了,想着把它看完,毕竟也就8个part。趁着考完试先看了一大半,算是补上了关于x64汇编的一些边边角角的知识吧。

想起来本科时候没教汇编,之所以学完全就是冲着pwn去的,只算是学会了一些零散的知识点,但在pwn题中已经够用了(一方面是自己在pwn方面也没有很深入学习,另一方面是都是上来就IDA Pro F5,确实用不了多少汇编)。这个教程,其实也并不是很好,有很多地方并没有说明白,只能靠着以前的基础补全细节;但另一方面,这个教程也确实覆盖了基础的x64汇编了,自己也学到了以前不会的知识。所以在这里就把自己学会的零散的知识点记录一下,仅仅是自我友好型的一篇博客了。

阅读全文 »

学习隐马尔可夫模型(Hidden Markov Model)的起因是在一个任务中被要求实现一个viterbi算法,系统学习之后被它的简洁和强大所吸引,也因此决定要写这篇文章。

文章主要还是以概念为主,不会涉及算法细节,力求知识的完整性和系统性,牺牲了一定的深度。对HMM的框架做了个大概的总结,实际上也就是把博客当成了电子版的笔记本了吧。

基本模型:假设、参数

在周志华的《机器学习》中,概率图模型分为两类,一类是通过有向图定义的贝叶斯网,一类是通过无向图定义的马尔可夫网。虽然名字上会造成困扰,但实际上HMM属于贝叶斯网,因为它描述的是可观测的时序状态和潜在的马尔科夫链(Markov chain)之间的概率关系,因而是有向的链表结构。

阅读全文 »

本文是《Effective Python 编写高质量Python代码的59个有效方法》一书的笔记的最后一篇。算是断断续续地看完这本书了,就结果来说,可能未必说得上在这一门语言上实现了什么重大认知的突破。但在这个过程中,学到了一些关于python的用法,也算是有所收获的。

阅读全文 »

The last commit in my mbe repo is Jan. 8th, after 5 months I finally crack the last challenge project2. Roughly I solve all challenges in more than one year, but I put it down to my lack of activation. However, I learn a lot from this open course and approve it to be a good source to learn pwn techniques in CTF.

阅读全文 »