zxgangandy Blog

位云算

什么是位运算?程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理):110AND 1011———-0010 –> 2由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。当然有人会说,这个快了有什么用,计算6 and 11没有什么实际意义啊。这一系列的文章就将告诉你,位运算到底可以干什么,有些什么经典应用,以及如何用位运算优化你的程序。

一致性哈希

布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,空间效率和查询时间都远远超过一般的算法,但是缺点是其返回的结果是概率性的,而不是确切的。

布隆过滤器

布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,空间效率和查询时间都远远超过一般的算法,但是缺点是其返回的结果是概率性的,而不是确切的。

分布式ID

在我们的日常业务开发中,通常需要对一些数据做唯一标识,例如大量抓取的文章ID用户ID微博ID聊天消息ID帖子ID订单ID通常会使用数据库自增的主键id作为唯一id。但是在并发量大、存在分库分表的情况或者是在微服务系统中我们通常会考虑使用分布式ID的生成方案来生成id。如果是小型应用,或者是业务量不大的情况下,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能解决。此种情况不属于这里讨论的范畴。

Android App 逆向入門之四:使用 Frida 進行動態分析

前面幾篇我們講的都是靜態分析的東西,也就是說我們並沒有把 app 跑起來,只是透過反編譯出來的程式碼研究 app 運作的邏輯,並且修改程式碼後重新打包執行。而動態分析指的就是我們會把 app 跑起來,並透過一些方式讓我們可以 hook 各種方法,去監視某些 method 的輸入以及輸出,甚至是竄改。這篇就讓我們來學習該怎麼樣使用 Frida 進行動態分析。

Android App 逆向入門之三:監聽 app 封包

監聽 App 的 request 是個很常見的需求,無論是 Android 工程師或者是前端工程師,都有可能會因為要 debug,所以必須看見 App 到底發了哪些 request,這篇就讓我們來看看該怎麼做。

Android App 逆向入門之二:修改 smali 程式碼

在第一篇當中我們學到了基礎中的基礎,靠著 Apktool 把 apk 拆開,修改資源以後組裝回去,並且把對齊且簽署過的 apk 裝回手機上面。而接下來的這一篇,我們要來看看如何修改程式碼。

Android App 逆向入門之一:拆開與重組 apk

「Android App 逆向入門」系列文一共有四篇,適合沒有接觸過 Android App 逆向,想要嘗試看看的人,內容包含基本的工具使用以及概念。第一篇我們將利用 apktool 拆開與重組 apk。