五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

go語言逆向技術(shù)之---常量字符串解密

2022-10-13 13:20 作者:不吃晚飯la  | 我要投稿

Go語言源代碼編譯成二進(jìn)制文件后,源代碼中的字符串存放在哪里?是如何組織的?

以下面go語言源代碼為例:
package main
import “fmt”
func main() {
fmt.Println(“Hello, World!”)
}

雖然只是打印一個(gè)字符串"Hello, World!",生成的二進(jìn)制文件中字符串卻是非常的多:

?



Go語言二進(jìn)制文件中字符串是存放在哪里的呢?其實(shí)存放的位置遵循的elf格式原則,在.rodata節(jié)中(如上圖所示)。

有同學(xué)會(huì)問C語言編譯出來的elf格式中字符串也是這樣存放的,Go語言的字符串組織方法和C語言的字符串組織方法有什么不同的呢?最大的不同點(diǎn)就是C語言字符串是以’\x00’結(jié)尾的,這樣不同字符串之間可以方便的以’\x00’來切割,而Go語言的字符串你可以發(fā)現(xiàn)是沒有’\x00’結(jié)尾的,比如上圖中"Hello, World!"后面緊接著就是"SIGKILL:"了,沒有’\x00’分隔。

Go語言字符串按以下方法來組織:

·??????? 字符串按長(zhǎng)度從小到大排列

·??????? 相同長(zhǎng)度的字符串按字符比較的方法從小到大排列

·??????? 非可見字符串先轉(zhuǎn)義再存放

另外Go語言字符串一般從go_string位置開始存放,如下圖所示

?



逆向時(shí)正確切割Go語言字符串方法有兩種:

·??????? 進(jìn)行反匯編,解析匯編指令,確定字符串起始位置和處理長(zhǎng)度 ?

?

?


·??????? 直接根據(jù)Go語言字符串組織原則進(jìn)行切割

基于Go語言字符串組織原則的快速切割算法:

·??????? 1、 搜索確定go_string起始位置

·??????? 2、 設(shè)置字符串搜索起始長(zhǎng)度為1

·??????? 3、 根據(jù)當(dāng)前字符串長(zhǎng)度切割字符串

·??????? 4、 預(yù)切割下一個(gè)字符串,和當(dāng)前字符串進(jìn)行比較,檢查是否違反原則,若符合保存當(dāng)前字符串,繼續(xù)第3步切割下一個(gè)字符串,否則表示字符串有變化進(jìn)行第5步操作

·??????? 5、 把當(dāng)前字符串長(zhǎng)度加1,繼續(xù)第3步的搜索,直至全部正確搜索完畢

如下圖所示(長(zhǎng)度為13個(gè)字節(jié)的字符串):

?



?


go語言逆向技術(shù)之---常量字符串解密的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
惠东县| 乌恰县| 广丰县| 阿拉善盟| 泗洪县| 垦利县| 林口县| 台东县| 九江县| 蓬溪县| 邢台市| 西丰县| 黄冈市| 林州市| 荆州市| 莱西市| 东兴市| 荥经县| 岳阳市| 南溪县| 隆林| 屏东市| 宁波市| 库伦旗| 利辛县| 揭阳市| 四会市| 炎陵县| 桃源县| 东源县| 新野县| 崇仁县| 湛江市| 三门峡市| 新宁县| 开阳县| 沙洋县| 天台县| 台湾省| 仁寿县| 宁化县|