日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

基于Android的ELF PLT/GOT符号重定向过程及ELF Hook实现

發布時間:2025/3/15 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Android的ELF PLT/GOT符号重定向过程及ELF Hook实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#引言
寫這篇技術文的原因,主要有兩個:

-?其一是發現網上大部分描述PLT/GOT符號重定向過程的文章都是針對x86的,比如[《Redirecting?functions?in?shared?ELF?libraries》](http://www.codeproject.com/Articles/70302/Redirecting-functions-in-shared-ELF-libraries#_Toc257815978)就寫得非常不錯。雖然其過程跟ARM非常類似,但由于CPU體系不同,指令實現差異非常大;
-?其二是網上大部分關于ELF文件格式的介紹,都是基于鏈接視圖(Linking?View),鏈接視圖是基于節(Section)對ELF進行解析的。然而動態鏈接庫在加載的過程中,linker只關注ELF中的段(Segment)信息。因此ELF中的節信息被完全篡改或者甚至刪除掉,并不會影響linker的加載過程,這樣做可以防止靜態分析工具(比如IDA,readelf等)對其進行分析,一般加過殼的ELF文件都會有這方面的處理。對于這種ELF文件,如果要實現hook功能,則必須要基于執行視圖(Execution?View)進行符號解析;

#準備
在往下閱讀之前,請先確保對ELF文件格式和ARM匯編有個大概了解,參考指引:

-?[ELF?文件格式分析](http://staff.ustc.edu.cn/~sycheng/sst/exp_crack/ELF.pdf);
-?[ARM文檔](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Cihbiggi.html#);


準備工具:

-?readelf(NDK包含)
-?objdump(NDK包含)
-?IDA?Pro?6.4或以上
-?Android真機或者模擬器


#符號重定向
在ARM上,常見的重定向類型,主要有三種,分別是**R_ARM_JUMP_SLOT**、**R_ARM_ABS32**和**R_ARM_GLOB_DAT**,而我們要hook?elf函數,則需要同時處理好這三種重定向類型。

##例子
先看示例代碼

```
typedef?int?(*strlen_fun)(const?char?*);
strlen_fun?global_strlen1?=?(strlen_fun)strlen;
strlen_fun?global_strlen2?=?(strlen_fun)strlen;

#define?SHOW(x)?LOGI("%s?is?%d",?#x,?x)

extern?"C"?jint?Java_com_example_allhookinone_HookUtils_elfhook(JNIEnv?*env,?jobject?thiz){
??const?char?*str?=?"helloworld";

??strlen_fun?local_strlen1?=?(strlen_fun)strlen;
??strlen_fun?local_strlen2?=?(strlen_fun)strlen;

??int?len0?=?global_strlen1(str);
??int?len1?=?global_strlen2(str);
??int?len2?=?local_strlen1(str);
??int?len3?=?local_strlen2(str);
??int?len4?=?strlen(str);
??int?len5?=?strlen(str);

??SHOW(len0);
??SHOW(len1);
??SHOW(len2);
??SHOW(len3);
??SHOW(len4);
??SHOW(len5);

??return?0;
}

```
這段代碼分別以三種不同的方式調用strlen,分別是全局函數指針、局部函數指針以及直接調用,下而我們針對這個例子,分別對三種調用分析進行分析。

先通過readelf,我們查看一下重定向表,如下所示:

```
Relocation?section?'.rel.dyn'?at?offset?0x2a48?contains?17?entries:
?Offset?????Info????Type????????????Sym.Value??Sym.?Name
0000ade0??00000017?R_ARM_RELATIVE???
0000af00??00000017?R_ARM_RELATIVE???
0000af0c??00000017?R_ARM_RELATIVE???
0000af10??00000017?R_ARM_RELATIVE???
0000af18??00000017?R_ARM_RELATIVE???
0000af1c??00000017?R_ARM_RELATIVE???
0000af20??00000017?R_ARM_RELATIVE???
0000af24??00000017?R_ARM_RELATIVE???
0000af28??00000017?R_ARM_RELATIVE???
0000af30??00000017?R_ARM_RELATIVE???
0000aefc??00003215?R_ARM_GLOB_DAT????00000000???__stack_chk_guard
0000af04??00003715?R_ARM_GLOB_DAT????00000000???__page_size
0000af08??00004e15?R_ARM_GLOB_DAT????00000000???strlen
0000b004??00004e02?R_ARM_ABS32???????00000000???strlen
0000b008??00004e02?R_ARM_ABS32???????00000000???strlen
0000af14??00006615?R_ARM_GLOB_DAT????00000000???__gnu_Unwind_Find_exid
0000af2c??00007415?R_ARM_GLOB_DAT????00000000???__cxa_call_unexpected

...
...

Relocation?section?'.rel.plt'?at?offset?0x2ad0?contains?48?entries:
?Offset?????Info????Type????????????Sym.Value??Sym.?Name
0000af40??00000216?R_ARM_JUMP_SLOT???00000000???__cxa_atexit
0000af44??00000116?R_ARM_JUMP_SLOT???00000000???__cxa_finalize
0000af48??00001716?R_ARM_JUMP_SLOT???00000000???memcpy
...
0000afd4??00004c16?R_ARM_JUMP_SLOT???00000000???fgets
0000afd8??00004d16?R_ARM_JUMP_SLOT???00000000???fclose
0000afdc??00004e16?R_ARM_JUMP_SLOT???00000000???strlen
0000afe0??00004f16?R_ARM_JUMP_SLOT???00000000???strncmp
...
...

```

在.rel.plt和.rel.dyn兩個section中,我們發現一共出現了4個strlen,我們先把它們的關鍵信息記錄下來,后面分析會非常有用。它們分別是

>?.rel.dyn?0000AF08?R_ARM_GLOB_DAT</p>
>?.rel.dyn?0000B004?R_ARM_ABS32</p>
>?.rel.dyn?0000B008?R_ARM_ABS32</p>
>?.rel.plt?0000AFDC?R_ARM_JUMP_SLOT

在代碼中,我們一共調用了6次strlen,但為什么只出現了4次呢?另外,它們之間又是如何對應的呢,帶著這些問題去分析匯編代碼。把編譯出來的so拖到IDA,我們看到示例代碼的指令:

```
.text:000050BC?????????????????EXPORT?Java_com_example_allhookinone_HookUtils_elfhook
.text:000050BC?Java_com_example_allhookinone_HookUtils_elfhook
.text:000050BC
.text:000050BC?var_40??????????=?-0x40
.text:000050BC?var_38??????????=?-0x38
.text:000050BC?var_34??????????=?-0x34
.text:000050BC?s???????????????=?-0x2C
.text:000050BC?var_28??????????=?-0x28
.text:000050BC?var_24??????????=?-0x24
.text:000050BC?var_20??????????=?-0x20
.text:000050BC?var_1C??????????=?-0x1C
.text:000050BC?var_18??????????=?-0x18
.text:000050BC?var_14??????????=?-0x14
.text:000050BC?var_10??????????=?-0x10
.text:000050BC?var_C???????????=?-0xC
.text:000050BC
.text:000050BC?????????????????PUSH????????????{R4,LR}
.text:000050BE?????????????????SUB?????????????SP,?SP,?#0x38
.text:000050C0?????????????????STR?????????????R0,?[SP,#0x40+var_34]
.text:000050C2?????????????????STR?????????????R1,?[SP,#0x40+var_38]
.text:000050C4?????????????????LDR?????????????R4,?=(_GLOBAL_OFFSET_TABLE_?-?0x50CA)
.text:000050C6?????????????????ADD?????????????R4,?PC?;?_GLOBAL_OFFSET_TABLE_
.text:000050C8?????????????????LDR?????????????R3,?=(aHelloworld?-?0x50CE)
.text:000050CA?????????????????ADD?????????????R3,?PC??;?"helloworld"
.text:000050CC?????????????????STR?????????????R3,?[SP,#0x40+s]
.text:000050CE?????????????????LDR?????????????R3,?=(strlen_ptr?-?0xAF34)
.text:000050D0?????????????????LDR?????????????R3,?[R4,R3]?;?__imp_strlen
.text:000050D2?????????????????STR?????????????R3,?[SP,#0x40+var_28]
.text:000050D4?????????????????LDR?????????????R3,?=(strlen_ptr?-?0xAF34)
.text:000050D6?????????????????LDR?????????????R3,?[R4,R3]?;?__imp_strlen
.text:000050D8?????????????????STR?????????????R3,?[SP,#0x40+var_24]
.text:000050DA?????????????????LDR?????????????R3,?=(global_strlen1_ptr?-?0xAF34)
.text:000050DC?????????????????LDR?????????????R3,?[R4,R3]?;?global_strlen1
.text:000050DE?????????????????LDR?????????????R3,?[R3]
.text:000050E0?????????????????LDR?????????????R2,?[SP,#0x40+s]
.text:000050E2?????????????????MOVS????????????R0,?R2
.text:000050E4?????????????????BLX?????????????R3
.text:000050E6?????????????????MOVS????????????R3,?R0
.text:000050E8?????????????????STR?????????????R3,?[SP,#0x40+var_20]
.text:000050EA?????????????????LDR?????????????R3,?=(global_strlen2_ptr?-?0xAF34)
.text:000050EC?????????????????LDR?????????????R3,?[R4,R3]?;?global_strlen2
.text:000050EE?????????????????LDR?????????????R3,?[R3]
.text:000050F0?????????????????LDR?????????????R2,?[SP,#0x40+s]
.text:000050F2?????????????????MOVS????????????R0,?R2
.text:000050F4?????????????????BLX?????????????R3
.text:000050F6?????????????????MOVS????????????R3,?R0
.text:000050F8?????????????????STR?????????????R3,?[SP,#0x40+var_1C]
.text:000050FA?????????????????LDR?????????????R2,?[SP,#0x40+s]
.text:000050FC?????????????????LDR?????????????R3,?[SP,#0x40+var_28]
.text:000050FE?????????????????MOVS????????????R0,?R2
.text:00005100?????????????????BLX?????????????R3
.text:00005102?????????????????MOVS????????????R3,?R0
.text:00005104?????????????????STR?????????????R3,?[SP,#0x40+var_18]
.text:00005106?????????????????LDR?????????????R2,?[SP,#0x40+s]
.text:00005108?????????????????LDR?????????????R3,?[SP,#0x40+var_24]
.text:0000510A?????????????????MOVS????????????R0,?R2
.text:0000510C?????????????????BLX?????????????R3
.text:0000510E?????????????????MOVS????????????R3,?R0
.text:00005110?????????????????STR?????????????R3,?[SP,#0x40+var_14]
.text:00005112?????????????????LDR?????????????R3,?[SP,#0x40+s]
.text:00005114?????????????????MOVS????????????R0,?R3??;?s
.text:00005116?????????????????BLX?????????????strlen
.text:0000511A?????????????????MOVS????????????R3,?R0
.text:0000511C?????????????????STR?????????????R3,?[SP,#0x40+var_10]
.text:0000511E?????????????????LDR?????????????R3,?[SP,#0x40+s]
.text:00005120?????????????????MOVS????????????R0,?R3??;?s
.text:00005122?????????????????BLX?????????????strlen
.text:00005126?????????????????MOVS????????????R3,?R0
??...
??...
.text:000051CA?????????????????ADD?????????????SP,?SP,?#0x38
.text:000051CC?????????????????POP?????????????{R4,PC}
.text:000051CC?;?End?of?function?Java_com_example_allhookinone_HookUtils_elfhook
```
先把幾個重要的地址找出來,它們分別是

-?_GLOBAL_OFFSET_TABLE_:?0x0000AF34
-?strlen_ptr:?0x0000AF08
-?__imp_strlen:?0x0000B0C8
-?global_strlen1_ptr:?0x0000AF0C
-?global_strlen1:?0x0000B004
-?global_strlen2_ptr:?0x0000AF10
-?global_strlen2:?0x0000B008

##全局函數指針調用外部函數
global_strlen1和global_strlen2的調用,對應0x000050E4和0x000050F4兩處的BLX指令,通過計算最終R3的值分別是\*global_strlen1和\*global_strlen2,而global_strlen1和global_strlen2的值正好對應位于.rel.dyn的兩個R_ARM_ABS32的重定位項,因此我們得出結論:**通過全局函數指針的方式調用外部函數,它的重定位類型是R_ARM_ABS32,并且位于.rel.dyn節區**。

我們只分析global_strlen1的調用過程,首先定位到global_strlen1_ptr(0x0000AF0C),該地址位于.got節區,_GLOBAL_OFFSET_TABLE_的上方。然后再通過global_strlen1_ptr定位到0x0000B004(位于.data節區),最后再通過0x0000B004定位到最終的函數地址,**因此R_ARM_ABS32重定位項的Offset指向最終調用函數地址的地址(也就是函數指針的指針)**,整個重定位過程是先位到.got,再從.got定位到.date。下面是.got段區的16進制表示片段:

```
...
0000AF0C??04?B0?00?00?08?B0?00?00??DC?B0?00?00?B4?87?00?00
0000AF1C??F4?84?00?00?60?5B?00?00??58?5B?00?00?50?5B?00?00
0000AF2C??EC?B0?00?00?FC?8C?00?00??00?00?00?00?00?00?00?00
...
0000B004??C8?B0?00?00?C8?B0?00?00?????????????????????????
0000B014??????????????????????????????????????????????????
0000B024??00?00?00?00?00?00?00?00??00?00?00?00?00?00?00?00
...
0000B0C8??00?00?00?00?00?00?00?00??00?00?00?00?00?00?00?00
0000B0D8??00?00?00?00?00?00?00?00??00?00?00?00?00?00?00?00
...
```

最后發現0x0000B0C8地址片的指令全為0,當動態鏈接時,linker會覆蓋0x0000B004地址的值,指向strlen的真正地址(而不是現在的0x0000B0C8,有點繞)。


##局部函數指針調用外部函數
local_strlen1和local_strlen2的調用,對應0x00005100和0x0000510C兩處的BLX指令,通過計算最終R3的值都是*strlen_prt,即0x0000AF08,正好對應位于.rel.dyn中的R_ARM_GLOB_DAT重定位項,因此我們得出結論:**通過局部函數指針方式調用外部函數,它的重定位類型是R_ARM_GLOB_DAT,并且位于.re.dyn節區**。

我們只分析local_strlen1的調用過程,首先是定位到strlen_prt(0x0000AF08),該地址位于.got節區,_GLOBAL_OFFSET_TABLE_的上方,然后再通過strlen_prt,定位到0x0000B0C8,跟上面分析的結果居然一樣,**因此R_ARM_GLOB_DAT的重定項Offset指向最終調用函數地址的地址(也就是函數指針的指針)**,下面是.got段區的16進制表示片段:

```
0000AF08??C8?B0?00?00?04?B0?00?00??08?B0?00?00?DC?B0?00?00
0000AF18??B4?87?00?00?F4?84?00?00??60?5B?00?00?58?5B?00?00
0000AF28??50?5B?00?00?EC?B0?00?00??FC?8C?00?00?00?00?00?00
...
0000B0C8??00?00?00?00?00?00?00?00??00?00?00?00?00?00?00?00
0000B0D8??00?00?00?00?00?00?00?00??00?00?00?00?00?00?00?00
...

```

需要注意的是,0x000050D8的指令“STR?R3,?[SP,#0x40+var_24]”,這里已經把函數的真實地址保存到堆棧了,**因此哪怕我們修改了GOT表也不會影響堆棧的值,因此這種重定位類型無法通過修改地址進行hook**。????????

##直接調用外部函數
最后看看strlen的直接調用,對應0x0000511A和0x00005122兩處的BLX指令,最后它們都指向.plt節區指令,如下所示:

```
.plt:00002E38?????????????????ADR?????????????R12,?0x2E40
.plt:00002E3C?????????????????ADD?????????????R12,?R12,?#0x8000
.plt:00002E40?????????????????LDR?????????????PC,?[R12,#(strlen_ptr_0?-?0xAE40)]!?;?__imp_strlen
...
0000AFDC??C8?B0?00?00?CC?B0?00?00??D0?B0?00?00?D4?B0?00?00?
0000AFEC??D8?B0?00?00?DC?B0?00?00??E0?B0?00?00?E4?B0?00?00?
0000AFFC??E8?B0?00?00?00?00?00?00??C8?B0?00?00?C8?B0?00?00?
...
```
最后,PC指向\*strlen_ptr_0,即strlen_ptr_0的地址0x0000AFDC,該地址位于.got節區,而0x0000AFDC地址值的正好是0x0000B0C8,多么熟悉的身影。因此得到結論,**直接調用外部函數,它的重定位類型是R_ARM_JUMP_SLOT,并且位于.re.plt節區,其Offset指向最終調用函數地址的地址(也就是函數指針的指針)**。整個過程是先到.plt,再到.got,最后才定位到真正的函數地址。

關于這部分的分析,發現IDA和objdump的反編譯結果有些差異,下面是通過objdump到的匯編指令:

```
00002e38?<strlen@plt>:
????2e38:??e28fc600???add??ip,?pc,?#0,?12
????2e3c:??e28cca08???add??ip,?ip,?#8,?20??;?0x8000
????2e40:??e5bcf19c???ldr??pc,?[ip,?#412]!??;?0x19c
...
...
??afd8:??00002c50???andeq??r2,?r0,?r0,?asr?ip
????afdc:??00002c50???andeq??r2,?r0,?r0,?asr?ip
????afe0:??00002c50???andeq??r2,?r0,?r0,?asr?ip
????afe4:??00002c50???andeq??r2,?r0,?r0,?asr?ip
```
見到afdc處的地址,指向的是0x00002c50,而0x00002c50正好是PLT[0],指令如下:

```
00002c50?<__cxa_atexit@plt-0x14>:
????2c50:??e52de004???push??{lr}????;?(str?lr,?[sp,?#-4]!)
????2c54:??e59fe004???ldr??lr,?[pc,?#4]??;?2c60?<__cxa_atexit@plt-0x4>
????2c58:??e08fe00e???add??lr,?pc,?lr
????2c5c:??e5bef008???ldr??pc,?[lr,?#8]!
????2c60:??000082d4???ldrdeq??r8,?[r0],?-r4
```
執行2c5c處指令后,最終pc指向0x0000af3c,正好是_GLOBAL_OFFSET_TABLE_?+?8,即GOT[2],我們看到0x0000af3c處:

```
0000AF3C??00?00?00?00?28?B0?00?00??24?B0?00?00?2C?B0?00?00
0000AF4C??30?B0?00?00?34?B0?00?00??38?B0?00?00?3C?B0?00?00
```

結果發現GOT[2]里指向的函數地址居然是0,這是因為android上的符號綁定并不支持lazy綁定,所以當so被加載時,linker會預先把GOT\[n\](n>=2)的所對應的函數都提前找出來,因此這里GOT\[2\]的代碼實際上不會被執行,因此在目前的Android上,并不存在完整的PLT/GOT鏈接過程。猜想這主要是出于穩定性考慮的。

##總結
雖然IDA和obudump兩個工具反編譯得出的指令在PLT\GOT過程中有些差別,但對于Android而言,其實這個差異不會造成影響,因為Android上不支持lazy綁定。同時我們得出一個非常重要的結論:**R_ARM_ABS32、R_ARM_GLOB_DAT和R_ARM_JUMP_SLOT的重定位項雖然在代碼中用法不一樣,但其offset都是指向一個函數的指針的指針**,這個對于我們下面進行elfhook非常有用。

#基于執行視圖解析ELF
[《Redirecting?functions?in?shared?ELF?libraries》](http://www.codeproject.com/Articles/70302/Redirecting-functions-in-shared-ELF-libraries#_Toc257815978)這篇文章所提供的例子,就是基于鏈接視圖對ELF進行解析的,與基于執行視圖進行解析相比,后面的邏輯基本是一樣的,關鍵是要通過segment找到.dynsym、.dynstr、.rel.plt和rel.dyn,以及它們的項數。

首次通過Program?Header?Table找到類型為PT_DYNAMIC的段,該的內容其實對應.dynamic,這段的內容對應Elf32_Dyn類型的數組,其結構體如下所示:

```
/*?Dynamic?structure?*/
typedef?struct?{
??Elf32_Sword??d_tag;????/*?controls?meaning?of?d_val?*/
??union?{
????Elf32_Word??d_val;??/*?Multiple?meanings?-?see?d_tag?*/
????Elf32_Addr??d_ptr;??/*?program?virtual?address?*/
??}?d_un;
}?Elf32_Dyn;
```

通過遍歷這個數組,我們可以找到所有的需要的信息,我把它們的對應關系列出來:

-?DT_HASH?->?.hash
-?DT_SYMTAB?&?DT_SYMENT?->?.dynsym
-?DT_STRTAB?&?DT_STRSZ?->?.dynstr
-?PLTREL(決定REL還是RELA)?&(DT_REL?|?DT_RELA)?&?(DT_RELSZ?|?DT_RELASZ?)?&?(DT_RELENT?|?DT_RELAENT?)?->?.rel.dyn
-?DT_JMPREL?&?DT_PLTRELSZ?&?(DT_RELENT?|?DT_RELAENT)?->?.rel.plt
-?FINI_ARRAY?&?FINI_ARRAYSZ?->?.fini_array
-?INIT_ARRAY?&?INIT_ARRAYSZ?->?.init_array

這是查找的相關代碼:

```
void?getElfInfoBySegmentView(ElfInfo?&info,?const?ElfHandle?*handle){

??info.handle?=?handle;
??info.elf_base?=?(uint8_t?*)?handle->base;
??info.ehdr?=?reinterpret_cast<Elf32_Ehdr?*>(info.elf_base);

??//?may?be?wrong
??info.shdr?=?reinterpret_cast<Elf32_Shdr?*>(info.elf_base?+?info.ehdr->e_shoff);
??info.phdr?=?reinterpret_cast<Elf32_Phdr?*>(info.elf_base?+?info.ehdr->e_phoff);

??info.shstr?=?NULL;

??Elf32_Phdr?*dynamic?=?NULL;
??Elf32_Word?size?=?0;

??getSegmentInfo(info,?PT_DYNAMIC,?&dynamic,?&size,?&info.dyn);
??if(!dynamic){
????LOGE("[-]?could't?find?PT_DYNAMIC?segment");
????exit(-1);
??}
??info.dynsz?=?size?/?sizeof(Elf32_Dyn);

??Elf32_Dyn?*dyn?=?info.dyn;
??for(int?i=0;?i<info.dynsz;?i++,?dyn++){

????switch(dyn->d_tag){

????case?DT_SYMTAB:
??????info.sym?=?reinterpret_cast<Elf32_Sym?*>(info.elf_base?+?dyn->d_un.d_ptr);
??????break;

????case?DT_STRTAB:
??????info.symstr?=?reinterpret_cast<const?char?*>(info.elf_base?+?dyn->d_un.d_ptr);
??????break;

????case?DT_REL:
??????info.reldyn?=?reinterpret_cast<Elf32_Rel?*>(info.elf_base?+?dyn->d_un.d_ptr);
??????break;

????case?DT_RELSZ:
??????info.reldynsz?=?dyn->d_un.d_val?/?sizeof(Elf32_Rel);
??????break;

????case?DT_JMPREL:
??????info.relplt?=?reinterpret_cast<Elf32_Rel?*>(info.elf_base?+?dyn->d_un.d_ptr);
??????break;

????case?DT_PLTRELSZ:
??????info.relpltsz?=?dyn->d_un.d_val?/?sizeof(Elf32_Rel);
??????break;

????case?DT_HASH:
??????uint32_t?*rawdata?=?reinterpret_cast<uint32_t?*>(info.elf_base?+?dyn->d_un.d_ptr);
??????info.nbucket?=?rawdata[0];
??????info.nchain?=?rawdata[1];
??????info.bucket?=?rawdata?+?2;
??????info.chain?=?info.bucket?+?info.nbucket;
??????break;
????}
??}

??//because?.dynsym?is?next?to?.dynstr,?so?we?can?caculate?the?symsz?simply
??info.symsz?=?((uint32_t)info.symstr?-?(uint32_t)info.sym)/sizeof(Elf32_Sym);
}

```
然而,有一個值我無法通過通過PT_DYNAMIC段得到的,那就是.dynsym的項數,我最后通過變通的方法得到的。由于.dynsym和.dynstr兩個節區是相鄰的,因此它們兩個地址相減,即可得到的.dynsym總長度,再除了sizeof(Elf32_Sym)即可得到.dynsym的項數,如果你有更好的方法,請跟我說說。

#ELF?Hook
有了上面的介紹之后,寫個ELF?Hook就很簡單的,我把關鍵代碼貼出來:

```
#define?R_ARM_ABS32?0x02
#define?R_ARM_GLOB_DAT?0x15
#define?R_ARM_JUMP_SLOT?0x16

int?elfHook(const?char?*soname,?const?char?*symbol,?void?*replace_func,?void?**old_func){
??assert(old_func);
??assert(replace_func);
??assert(symbol);

??ElfHandle*?handle?=?openElfBySoname(soname);
??ElfInfo?info;

??getElfInfoBySegmentView(info,?handle);

??Elf32_Sym?*sym?=?NULL;
??int?symidx?=?0;

??findSymByName(info,?symbol,?&sym,?&symidx);

??if(!sym){
????LOGE("[-]?Could?not?find?symbol?%s",?symbol);
????goto?fails;
??}else{
????LOGI("[+]?sym?%p,?symidx?%d.",?sym,?symidx);
??}

??for?(int?i?=?0;?i?<?info.relpltsz;?i++)?{
????Elf32_Rel&?rel?=?info.relplt[i];
????if?(ELF32_R_SYM(rel.r_info)?==?symidx?&&?ELF32_R_TYPE(rel.r_info)?==?R_ARM_JUMP_SLOT)?{

??????void?*addr?=?(void?*)?(info.elf_base?+?rel.r_offset);
??????if?(replaceFunc(addr,?replace_func,?old_func))
????????goto?fails;

??????//only?once
??????break;
????}
??}

??for?(int?i?=?0;?i?<?info.reldynsz;?i++)?{
????Elf32_Rel&?rel?=?info.reldyn[i];
????if?(ELF32_R_SYM(rel.r_info)?==?symidx?&&
????????(ELF32_R_TYPE(rel.r_info)?==?R_ARM_ABS32
????????????||?ELF32_R_TYPE(rel.r_info)?==?R_ARM_GLOB_DAT))?{

??????void?*addr???????=?(void?*)?(info.elf_base?+?rel.r_offset);
??????if?(replaceFunc(addr,?replace_func,?old_func))
????????goto?fails;
????}
??}

??fails:
??closeElfBySoname(handle);
??return?0;
}
```

最后是測試的代碼:

```
typedef?int?(*strlen_fun)(const?char?*);
strlen_fun?old_strlen?=?NULL;

size_t?my_strlen(const?char?*str){
??LOGI("strlen?was?called.");
??int?len?=?old_strlen(str);
??return?len?*?2;
}


strlen_fun?global_strlen1?=?(strlen_fun)strlen;
strlen_fun?global_strlen2?=?(strlen_fun)strlen;

#define?SHOW(x)?LOGI("%s?is?%d",?#x,?x)

extern?"C"?jint?Java_com_example_allhookinone_HookUtils_elfhook(JNIEnv?*env,?jobject?thiz){
??const?char?*str?=?"helloworld";

??strlen_fun?local_strlen1?=?(strlen_fun)strlen;
??strlen_fun?local_strlen2?=?(strlen_fun)strlen;

??int?len0?=?global_strlen1(str);
??int?len1?=?global_strlen2(str);
??int?len2?=?local_strlen1(str);
??int?len3?=?local_strlen2(str);
??int?len4?=?strlen(str);
??int?len5?=?strlen(str);

??LOGI("hook?before:");
??SHOW(len0);
??SHOW(len1);
??SHOW(len2);
??SHOW(len3);
??SHOW(len4);
??SHOW(len5);

??elfHook("libonehook.so",?"strlen",?(void?*)my_strlen,?(void?**)&old_strlen);

??len0?=?global_strlen1(str);
??len1?=?global_strlen2(str);
??len2?=?local_strlen1(str);
??len3?=?local_strlen2(str);
??len4?=?strlen(str);
??len5?=?strlen(str);

??LOGI("hook?after:");
??SHOW(len0);
??SHOW(len1);
??SHOW(len2);
??SHOW(len3);
??SHOW(len4);
??SHOW(len5);

??return?0;
}
```
從打印結果可以發現,local_strlen1和local_strlen2正所上面所說,并沒有受影響,但如果函數再次被調用,則生效了,原因不解析了。測試結果就不發了,留給你們試吧。

#GitHup地址

完整代碼,見https://github.com/boyliang/AllHookInOne.git


原文地址:來自看雪論壇@PEdiy.com http://bbs.pediy.com/showthread.php?t=193720

總結

以上是生活随笔為你收集整理的基于Android的ELF PLT/GOT符号重定向过程及ELF Hook实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧洲av在线 | 三级午夜片| 成人av一区二区三区 | 香蕉视频在线网站 | 婷婷日韩| 精品999久久久| 久久亚洲婷婷 | 欧美在线1 | 亚洲成人av在线播放 | 欧美黑吊大战白妞欧美 | 婷婷网五月天 | 久 久久影院| 国产 日韩 欧美 自拍 | 国产97在线视频 | 久久成人精品电影 | 精品国产一区二区三区四 | 亚洲专区免费观看 | 免费看污的网站 | 久久久精品影视 | 国产精品一区二区免费在线观看 | 在线中文字幕电影 | 成年人电影免费看 | 国产亚洲成av人片在线观看桃 | 免费不卡中文字幕视频 | 国产成人精品一区二三区 | 久热av在线 | 一区二精品 | 久久高清免费视频 | 91av视频在线观看免费 | 色综合久久久久久久久五月 | 天天草天天草 | 日韩在线视频免费观看 | 狠狠操狠狠插 | 久久天天躁夜夜躁狠狠85麻豆 | 天天艹日日干 | 日韩亚洲精品电影 | 亚洲亚洲精品在线观看 | 国产亚洲精品无 | 夜夜躁日日躁狠狠久久88av | 欧美一区二区在线刺激视频 | 九九热视频在线播放 | 夜色资源网 | 精品影院一区二区久久久 | 久久国产热 | 成人av资源网 | 九九热在线免费观看 | 国产精品专区在线 | 九九欧美 | 免费高清无人区完整版 | 国产精品美 | 国产精品美女久久久久aⅴ 干干夜夜 | 韩国av在线播放 | 黄免费在线观看 | 日日操天天射 | 国产精品日韩欧美一区二区 | 伊人国产在线观看 | 91av官网 | 在线精品视频在线观看高清 | 天堂网一区| 91欧美精品| 国产在线观看你懂得 | 国产美女搞久久 | 亚洲最新av | 亚洲理论在线观看电影 | 天天操天天添天天吹 | 人人玩人人添人人澡97 | 国产美女主播精品一区二区三区 | 午夜电影 电影 | 精品 一区 在线 | 免费视频一二三区 | a在线免费观看视频 | 香蕉在线视频观看 | 五月婷激情 | 天天插天天色 | 久久精品亚洲一区二区三区观看模式 | 国产亚洲日本 | 欧美日韩不卡一区二区三区 | 久久精品国产精品亚洲精品 | 久久精品中文字幕免费mv | 日韩中文字幕免费在线播放 | 国产在线观看你懂的 | 国产高清在线一区 | 国内精品久久久久久久久久久 | 婷婷天天色 | 免费h在线观看 | 欧美日韩免费一区二区 | 日韩最新理论电影 | 91人人干| 久久亚洲免费视频 | 在线观看免费高清视频大全追剧 | 丁香婷婷激情五月 | 欧美一级片在线 | 激情在线网 | 美女黄频在线观看 | 久久久精品福利视频 | 国产专区欧美专区 | 五月婷婷色 | 国产一区精品在线观看 | 少妇自拍av| av成年人电影 | 亚洲成人中文在线 | 中文在线字幕免费观 | 操高跟美女 | av中文字幕在线免费观看 | 日本99久久| 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产免费xvideos视频入口 | 女人高潮一级片 | 韩日在线一区 | 亚洲婷婷在线视频 | 久久久久久高潮国产精品视 | 五月天久久久 | 在线播放日韩av | 五月婷婷,六月丁香 | 亚洲精品乱码久久久久久 | 天天草综合网 | 欧美精品久久久久久久久久 | 国产r级在线观看 | 久久久久久精 | 国产亚洲人成网站在线观看 | 久久精品电影院 | 成人毛片久久 | 91在线中字| 亚洲一区二区三区在线看 | 91亚洲精品久久久中文字幕 | 在线观看亚洲 | 久久久久久久久久久久影院 | www.夜夜夜 | 亚洲国产欧美在线人成大黄瓜 | 国产精品成人国产乱一区 | 国产一二区视频 | 亚洲精品综合一二三区在线观看 | 亚洲午夜久久久久久久久久久 | 黄色91在线观看 | 美女网站视频色 | 亚洲精品视频二区 | 久热免费在线观看 | 激情视频综合网 | 天天天色综合 | 在线成人高清电影 | 欧美大片www| 日韩羞羞 | 亚洲免费精彩视频 | 国产成人一区二区精品非洲 | 免费韩国av | 91丨精品丨蝌蚪丨白丝jk | 成人av在线播放网站 | 最近中文字幕视频完整版 | 亚洲欧美成人在线 | 中文字幕在线观看91 | 欧美精品中文 | 色综合天天| 成人久久久久久久久 | 97超碰.com| 久久兔费看a级 | 欧美嫩草影院 | 国产午夜三级一区二区三桃花影视 | 91社区国产高清 | 精品国产乱码 | 91精品视屏 | 黄色天堂在线观看 | 国产69精品久久99不卡的观看体验 | 97电院网手机版 | 久久久黄色免费网站 | 国产色在线观看 | 在线有码中文字幕 | 午夜免费久久看 | 欧美日韩一区二区在线观看 | 激情网在线观看 | 亚洲精品久久久久久中文传媒 | 欧美 高跟鞋交 xxxxhd | 久久免费公开视频 | 在线观看亚洲专区 | 久99精品| 国内精品久久久久 | 免费观看不卡av | 91人人爽人人爽人人精88v | 婷婷综合激情 | 久久国精品 | 狠狠色丁香婷婷综合最新地址 | 日韩高清在线观看 | 婷婷网在线| 中文字幕在线观看免费观看 | 最近日本字幕mv免费观看在线 | 中文字幕中文字幕在线中文字幕三区 | 成人四虎影院 | 成年人av在线播放 | 欧美一区二区三区在线视频观看 | 18做爰免费视频网站 | 精品天堂av | 欧美日韩电影在线播放 | 人人干人人艹 | 国产黄色片免费在线观看 | 日日干夜夜草 | 99婷婷狠狠成为人免费视频 | 九九在线视频免费观看 | 欧美日产在线观看 | 国产亚洲成av片在线观看 | 免费福利视频网 | 成人永久在线 | 久久久这里有精品 | 久久永久视频 | 成年人黄色免费看 | 激情视频一区二区三区 | 一区二区电影网 | 国产视频一区二区在线 | 久久精品视频中文字幕 | 国产专区一 | 国产一在线精品一区在线观看 | 91av视频在线播放 | 亚洲毛片在线观看. | 国内久久精品 | 99久久久国产精品免费99 | 日韩av电影免费在线观看 | 中文字幕第 | 波多野结衣久久精品 | 日韩va欧美va亚洲va久久 | 91九色视频网站 | 日韩美精品视频 | 日本韩国精品一区二区在线观看 | 中文字幕av专区 | 人人干人人搞 | 精品在线视频一区二区三区 | 一区二区三区在线免费播放 | 中文字幕中文字幕在线中文字幕三区 | 欧美另类高潮 | 亚洲日本在线视频观看 | 亚洲天天在线 | 不卡电影免费在线播放一区 | av网站免费看 | 国产日韩欧美在线播放 | 亚洲成人中文在线 | 伊人婷婷久久 | 91精品国产电影 | 免费a视频 | 国产男男gay做爰 | 97色在线观看| 亚洲久草在线 | 亚洲国产资源 | 五月婷婷丁香综合 | 日韩亚洲欧美中文字幕 | 亚洲精品白浆高清久久久久久 | 麻豆国产网站入口 | 欧美成人精品在线 | 最近2019中文免费高清视频观看www99 | 国产福利91精品 | 97精品一区二区三区 | 在线观看精品一区 | 日韩精品一区二区三区三炮视频 | 精品一二三四视频 | 日本免费久久高清视频 | 夜夜操狠狠操 | 999视频在线观看 | 美女免费黄网站 | 国产一区二区精品久久91 | 五月天激情在线 | 97在线影视| 午夜精品久久久久久久99 | 色资源二区在线视频 | 18国产精品福利片久久婷 | 亚洲最大成人免费网站 | 国产一区二区在线精品 | 久久免费99 | 伊人资源站| jizzjizzjizz亚洲 | 国产精品 中文在线 | 免费看一级 | 国产高清一区二区 | 亚洲天堂免费视频 | 国产99视频在线观看 | 久久视频中文字幕 | 国产精品女同一区二区三区久久夜 | 亚洲免费国产 | 三级免费黄 | 久久人人97超碰国产公开结果 | 国产一级免费电影 | 欧美精品一二三 | www.天天操 | 欧美日韩在线视频免费 | 久草免费在线 | 色狠狠综合天天综合综合 | 91精品国自产在线观看欧美 | 成年人在线免费看视频 | 国产精品精品国产色婷婷 | 不卡电影免费在线播放一区 | 中文字幕综合在线 | 最近更新好看的中文字幕 | 国产一区二区三区免费在线观看 | 中文国产成人精品久久一 | 激情五月伊人 | 九九交易行官网 | 99在线免费观看视频 | 亚洲精品在线视频网站 | 在线久草视频 | 亚洲天天做 | 欧美日韩中文字幕在线视频 | 精品久久久成人 | 国产精品一区二区在线看 | 国产 日韩 中文字幕 | 久久久人人爽 | 国产日韩在线一区 | 日韩精品一区二区三区电影 | 精品黄色片 | 97人人澡人人添人人爽超碰 | 免费看的黄色的网站 | 亚洲精品久久在线 | 成人精品在线 | 香蕉视频在线免费 | 欧美一二三在线 | 亚洲国产精彩中文乱码av | 6699私人影院 | 日本中文在线 | 亚洲欧美偷拍另类 | 国产成人精品一区在线 | 四虎永久视频 | 亚洲精品一区二区网址 | 波多野结衣一区二区三区中文字幕 | 日日夜夜骑 | 亚洲视频精品在线 | 日韩乱码中文字幕 | 天堂av在线网 | 午夜av大片 | 久久久久久久国产精品视频 | 亚洲激情小视频 | 美女黄频在线观看 | 在线看片成人 | 97成人精品视频在线观看 | 欧美日韩在线精品 | 天天色天天色 | 射九九| 激情五月亚洲 | 久久精品成人 | 成人资源在线播放 | 天堂va在线观看 | 成人av直播 | 国产高清精 | 国产粉嫩在线观看 | 中文av资源站 | 日日夜夜噜噜噜 | 国内成人综合 | 久久国产网 | 国产精彩视频一区 | 天天草综合网 | www.天天干.com | 日韩二区精品 | av在线免费播放网站 | 99国产精品免费网站 | 亚洲男男gaygay无套 | 国产日韩欧美在线一区 | 一区二区三区www | 福利在线看片 | 欧美日韩精品影院 | 精品国偷自产在线 | 81国产精品久久久久久久久久 | 国产拍揄自揄精品视频麻豆 | 最近中文字幕免费观看 | 亚洲特级片 | 久久99视频 | 337p日本大胆噜噜噜噜 | 黄色免费电影网站 | 日韩成人免费在线 | 91麻豆精品 | 色综合天天色综合 | 久久久www成人免费精品 | 精品久久久久久久久亚洲 | 欧美夫妻生活视频 | 日韩av一区二区三区四区 | 色播五月婷婷 | 欧美性生活免费看 | 91精品老司机久久一区啪 | 久久免费视频播放 | 日韩久久一区二区 | 91精品一区二区三区蜜臀 | 欧美日本在线观看视频 | 在线观看亚洲国产精品 | 久久深夜福利免费观看 | 久久精品99国产精品亚洲最刺激 | 美国av大片 | 久久久国产精华液 | 国产精品久久久久9999吃药 | 777奇米四色 | 黄色av电影 | 久久九九国产精品 | 国产美女被啪进深处喷白浆视频 | 国产精品99在线播放 | 最近高清中文字幕在线国语5 | 久久久久久久久免费视频 | 亚洲在线精品 | 欧美巨大荫蒂茸毛毛人妖 | 日韩色在线| 狠狠色丁香九九婷婷综合五月 | 国模吧一区 | 国产午夜三级一二三区 | 美女久久网站 | 激情影音先锋 | 国产在线观看高清视频 | 91入口在线观看 | 免费观看mv大片高清 | 草久在线视频 | 日韩av高潮 | 成人午夜电影在线 | av一区二区三区在线 | 在线观看久 | 中文字幕精品三区 | 免费人成在线观看网站 | 美女视频黄是免费的 | 国产精品爽爽久久久久久蜜臀 | 欧美美女视频在线观看 | 91社区国产高清 | 综合视频在线 | 麻豆视频免费观看 | 国产二区视频在线观看 | 欧美大香线蕉线伊人久久 | 国产 欧美 日本 | 91插插插免费视频 | 国产伦精品一区二区三区无广告 | 国产精品女人久久久 | 亚洲永久精品在线 | 久久九九视频 | 成人电影毛片 | 国产精品中文字幕在线 | 色香网| 欧美精品一区二区免费 | 91看片一区二区三区 | 黄色一级大片在线观看 | 亚洲五月 | 久久免费中文视频 | 亚洲午夜电影网 | 久久情侣偷拍 | 99精品视频免费在线观看 | 久久久久久免费网 | 美女在线免费观看视频 | 美女免费视频观看网站 | 欧美日韩一区二区视频在线观看 | 亚洲日本va中文字幕 | 黄色大全免费观看 | 日韩一区二区在线免费观看 | 最近中文字幕mv免费高清在线 | 久久黄色成人 | 免费视频91 | 国产69精品久久app免费版 | 欧美激情精品久久久久久变态 | 国产精品专区在线观看 | 黄色最新网址 | 在线视频1卡二卡三卡 | 97超碰中文字幕 | 精品国产理论片 | 国产明星视频三级a三级点| 国产精品av免费在线观看 | av一区二区三区在线播放 | 欧美在线不卡一区 | 亚洲另类人人澡 | 久在线观看 | 玖玖爱在线观看 | 日日操日日 | 粉嫩av一区二区三区四区五区 | 欧美巨大荫蒂茸毛毛人妖 | 日韩一级片观看 | 2020天天干天天操 | 亚欧日韩成人h片 | 亚洲国产69 | 色综合五月 | 园产精品久久久久久久7电影 | 久久久国产精品麻豆 | 精品一区二区在线免费观看 | 人人爱人人舔 | 操高跟美女 | 国产一区二区久久久久 | 天天操人人要 | 欧美整片sss | 毛片网站免费在线观看 | 国产香蕉视频在线播放 | 亚洲国产网站 | 久久艹国产视频 | 中文字幕在线视频一区二区 | 日韩久久精品一区二区 | 久久99精品久久久久蜜臀 | 成人欧美一区二区三区在线观看 | 亚洲国产资源 | 久久亚洲精品国产亚洲老地址 | 国产日产精品久久久久快鸭 | 久久精品电影院 | 精品久久久久久久久久久院品网 | 免费一级特黄录像 | 天天人人| 99精品视频免费观看视频 | 久久调教视频 | 成人午夜精品久久久久久久3d | 国产精品观看在线亚洲人成网 | 日韩欧美视频在线免费观看 | 免费看色网站 | 久草.com | 亚洲免费av片 | 亚洲视频axxx| 国产精品美女久久久久久2018 | 免费观看国产成人 | 国产九色视频在线观看 | 国产成人黄色 | 在线观看免费高清视频大全追剧 | 国产福利小视频在线 | 蜜臀91丨九色丨蝌蚪老版 | 欧美日韩在线视频一区 | 成人免费共享视频 | 在线 高清 中文字幕 | 亚洲 精品在线视频 | 久久69av| 国产精品久久久久久久久久免费 | 国产视频在线观看一区二区 | 欧美日韩高清在线 | 久久亚洲美女 | 一个色综合网站 | 午夜免费福利片 | 在线观看黄a| 黄在线免费看 | 在线观看av大片 | 成人97视频一区二区 | 九九综合在线 | 福利视频导航网址 | 久久久久久免费 | 国产精品久久久久久久久久尿 | 天天操天天玩 | 天天操天天干天天插 | 亚洲成人二区 | 免费在线观看日韩视频 | 成年人视频在线免费观看 | 亚洲三级黄 | 国产一区免费在线观看 | 亚洲综合色激情五月 | 免费观看www7722午夜电影 | 久久av影视| 综合中文字幕 | .精品久久久麻豆国产精品 亚洲va欧美 | 在线a人片免费观看视频 | 国产午夜三级一区二区三桃花影视 | 久久久免费毛片 | 91网址在线观看 | 在线免费观看一区二区三区 | 久久艹国产| 成人av电影免费 | 国产精品理论视频 | 国内精品国产三级国产aⅴ久 | 深夜免费小视频 | 国产成人久久精品77777综合 | 精品国产一区二区三区日日嗨 | 亚州精品视频 | 亚洲精品视频网 | 亚洲毛片一区二区三区 | 草樱av | 久久都是精品 | 国产精品毛片久久久久久久久久99999999 | 91麻豆精品国产91久久久久 | 人人插人人做 | 日本中文字幕电影在线免费观看 | 十八岁以下禁止观看的1000个网站 | 国内99视频 | 伊人亚洲综合网 | 一本一本久久aa综合精品 | 美女久久网站 | 国产一区高清在线 | 天天曰天天曰 | 国产精彩视频 | 亚洲国产精品va在线 | 国产视频精品网 | 国产一级做a爱片久久毛片a | 久久精品草 | 免费久久片| 亚洲国产精品久久久久 | 日韩在线免费视频观看 | 亚洲区精品视频 | 色网影音先锋 | 欧美精品xxx | 91精品欧美| 97成人精品区在线播放 | 精品国产乱码一区二区三区在线 | 婷婷电影在线观看 | 91最新中文字幕 | 激情五月婷婷综合网 | 成人av中文字幕在线观看 | 国产精品大尺度 | 人人添人人澡人人澡人人人爽 | 麻豆 free xxxx movies hd| 热久久免费视频精品 | 亚洲天堂自拍视频 | 韩日精品在线观看 | 97av影院| 99视频在线精品国自产拍免费观看 | 国产精品va在线观看入 | 日韩羞羞 | 五月天久久久久 | 国产精品毛片久久久久久 | 在线免费成人 | av电影亚洲 | 欧美在线观看视频一区二区 | 网站免费黄 | 日韩欧美综合在线视频 | 欧美日韩国产综合一区二区 | 综合婷婷丁香 | 久久综合久久久久88 | 日韩精品久久久久久中文字幕8 | 日韩理论片在线观看 | 中文字幕av一区二区三区四区 | 六月丁香色婷婷 | 久久久久久久久久久久久久免费看 | 中文字幕在线影视资源 | 欧美精彩视频 | 亚洲狠狠| 深爱激情综合 | 国产午夜三级一区二区三桃花影视 | 国产精品久久久久久久久久久久午夜片 | 在线视频欧美日韩 | 国产99久久久国产精品免费二区 | 人人澡超碰碰97碰碰碰软件 | 免费在线国产黄色 | 亚洲欧美视频在线 | 在线v片| 91完整版在线观看 | 国产精品久久久久久久av电影 | 国产精品观看在线亚洲人成网 | 国产精品久久久久一区二区三区共 | 香蕉视频久久 | 狠狠干天天射 | 成人av免费 | 国产精品免费观看在线 | 国产97视频在线 | 日本成人免费在线观看 | 天天爽网站 | 色诱亚洲精品久久久久久 | 一级电影免费在线观看 | 成人av电影网址 | 丁香午夜 | 国产手机视频在线观看 | 亚洲成人av片 | 亚洲2019精品| 三级av在线| 在线视频婷婷 | 韩国一区二区三区视频 | 欧美另类交在线观看 | 免费看av在线 | 亚洲一级片av | 国产视频中文字幕在线观看 | 免费看的毛片 | 99久久99久久精品国产片果冰 | 日韩大陆欧美高清视频区 | 欧美日韩国产在线 | av超碰免费在线 | 麻豆av电影 | 欧美狠狠操 | 欧美日韩xx | 激情av一区二区 | 国产二区视频在线 | 免费日韩一级片 | 国产福利av | 91探花国产综合在线精品 | 欧美日本中文字幕 | 91日韩在线专区 | 97在线播放 | 国产精品成人国产乱 | 国内99视频 | 91精品国产综合久久福利不卡 | 成人国产精品免费 | 久久在线视频在线 | 久久亚洲区 | 粉嫩一二三区 | 色婷婷啪啪免费在线电影观看 | 色国产在线 | 日韩精品视频免费专区在线播放 | 精品久久1 | 亚洲国产精久久久久久久 | 亚洲a免费| 欧美国产高清 | 国产免费观看视频 | 日韩高清国产精品 | 精品久久久久久久久久久久久久久久 | 黄色免费观看网址 | 久久免费资源 | 亚洲国产成人高清精品 | 国产精品免费视频一区二区 | 久久a v电影 | 日韩欧美视频二区 | 日本精油按摩3 | 男女激情片在线观看 | 91亚洲精品久久久久图片蜜桃 | 99这里只有精品99 | 在线观看中文字幕一区 | 又大又硬又黄又爽视频在线观看 | av看片在线观看 | 国产精品婷婷午夜在线观看 | 日韩天堂在线观看 | 国产精品视频不卡 | 欧洲精品一区二区 | 国产视频1区2区3区 久久夜视频 | 香蕉视频在线免费看 | 日韩在线观看中文 | 欧美日韩高清在线 | 亚洲成a人片在线观看网站口工 | 亚洲国产精品电影 | 91精品国产欧美一区二区 | 夜色资源站国产www在线视频 | 国产精品99久久久久久宅男 | 天天做夜夜做 | 中文字幕亚洲精品日韩 | 手机成人免费视频 | 久热只有精品 | 天天操天天操天天操天天操 | 欧美精品v国产精品v日韩精品 | 国产99久久精品一区二区永久免费 | 欧美一区二区三区四区夜夜大片 | 在线久草视频 | 青青河边草手机免费 | 特级毛片网 | 国产成人亚洲精品自产在线 | 午夜视频导航 | 日本不卡一区二区三区在线观看 | 国产亚洲精品久久久久动 | 日韩精品一区二区三区视频播放 | 久久国产精品99久久久久 | 国产美女被啪进深处喷白浆视频 | 五月天com| 成人黄色片免费看 | 婷婷综合影院 | 嫩草av在线 | 国产黄色片免费在线观看 | 超级碰碰碰视频 | 国产精品自产拍在线观看蜜 | 精品国产1区二区 | 91激情视频在线播放 | 精品国产一区二区三区在线观看 | 九色免费视频 | 亚洲 欧洲 国产 精品 | 亚洲精品久久久久中文字幕二区 | 一区二区三区四区在线 | 色在线中文字幕 | 日p视频在线观看 | 麻豆久久久久久久 | 91精品网站 | 成人黄色电影在线观看 | 干av在线 | 麻豆一二三精选视频 | 久久人人爽人人人人片 | 久久曰视频 | 久久久久久蜜桃一区二区 | 久久精品99国产国产 | 国产一级在线观看视频 | 亚洲另类在线视频 | 丝袜足交在线 | 精品99在线观看 | 一级免费片 | 中文字幕国产 | 免费精品人在线二线三线 | 349k.cc看片app| 国产又粗又猛又黄又爽的视频 | 婷婷av网站 | 亚洲黄色激情小说 | 日韩欧美在线视频一区二区三区 | 西西444www大胆高清视频 | 欧美精选一区二区三区 | 日韩av在线资源 | 日韩免费看的电影 | 毛片美女网站 | 亚洲免费在线观看视频 | 日韩深夜在线观看 | 91精品国产综合久久婷婷香蕉 | 国产精品久久久久久久免费大片 | 久久精品毛片基地 | 99爱这里只有精品 | 亚洲爱爱视频 | 极品美女被弄高潮视频网站 | 欧美日产在线观看 | 91欧美国产 | 国产精品成人免费精品自在线观看 | 在线成人欧美 | 天天射天天爱天天干 | 中国一区二区视频 | 亚洲一区免费在线 | 91免费看黄色 | 国产精品久久久 | 麻豆国产视频下载 | 国产视频精选 | 色综合天天干 | 久久精品国产久精国产 | 91精品国 | 日韩电影中文,亚洲精品乱码 | 国产精品theporn| 国产人成看黄久久久久久久久 | 日本激情动作片免费看 | 国产一区黄色 | 又爽又黄又无遮挡网站动态图 | 国产九九精品视频 | 在线v片免费观看视频 | 国内视频| 日本中文字幕在线看 | 96看片 | 欧美日韩免费观看一区=区三区 | 国产一二三在线视频 | 成人v| 蜜臀av夜夜澡人人爽人人 | 天天操天天射天天爽 | 精品av网站| 国产一区二区在线免费观看 | 亚洲第一中文字幕 | 99精品国产成人一区二区 | 亚洲狠狠婷婷综合久久久 | 欧美色黄| 精品一区二区免费视频 | 四虎在线视频免费观看 | 亚洲精品www | 一区二区三区日韩在线 | 国产精品一区二区在线观看 | 午夜久久影视 | 日韩免费观看av | 亚洲伊人网在线观看 | 亚洲一区美女视频在线观看免费 | 日韩精品一区二区三区高清免费 | 人人爽人人爽人人爽学生一级 | 久久国产亚洲精品 | 日韩视频一区二区在线观看 | 欧美日韩在线电影 | 激情综合网五月 | 婷婷在线视频观看 | 日韩啪啪小视频 | 在线观看成人福利 | 久久久久亚洲精品男人的天堂 | 97视频免费播放 | 欧美日韩高清一区二区三区 | 狠狠精品| 久久激情网站 | 久久综合久久久 | 中文字幕在线视频一区 | 精品一区二区亚洲 | 亚洲精品97| 黄色成品视频 | 日韩欧美国产精品 | 丝袜av一区 | 国产亚洲一区二区三区 | 午夜精品电影 | 在线电影91 | 免费美女av| 91精品视频网站 | 在线观看日韩精品 | 免费久久99精品国产婷婷六月 | 国产不卡av在线播放 | 天天拍夜夜拍 | 在线中文字幕观看 | 亚洲精品视频在线免费 | 久久人人爽人人爽 | 亚洲五月综合 | 97免费公开视频 | 日韩精品一区二区在线观看 | 黄色免费高清视频 | 成人免费视频观看 | 国产精品99久久久久久人免费 | 狠狠狠色丁香婷婷综合久久五月 | 日韩精品无码一区二区三区 | 欧美吞精 | 久久久久久久久综合 | 久久精品一区二区国产 | 国内偷拍精品视频 | 久久精品日本啪啪涩涩 | 天天色天天搞 | 日韩电影在线观看一区二区三区 | 欧美日韩在线视频一区二区 | 国产精品少妇 | 最近中文字幕完整视频高清1 | 国产精品中文字幕在线播放 | 一级黄色在线免费观看 | 天天操天天玩 | 在线观看中文字幕av | 久久综合影音 | 欧美在线a视频 | 亚洲精品视频大全 | 在线观看视频三级 | 狠狠网 | 国产精品视频在线观看 | 国产亚洲精品久久久久久移动网络 | 久久久久久久久久久久久9999 | 99视频精品全部免费 在线 | 国产成人精品亚洲日本在线观看 | 亚洲欧美视频网站 | 日产乱码一二三区别免费 | 国产精品久久精品 | 国产日韩在线看 | 亚洲人在线7777777精品 | 91理论片午午伦夜理片久久 | 中文字幕电影一区 | 国内精品久久久久久久久久久 | 中文字幕精品一区二区精品 | 日本中文字幕高清 | 亚洲日本欧美 | 中文字幕在线观看的网站 | 国产一区二区在线播放 | 亚洲精品视频二区 | 久久尤物电影视频在线观看 | 99久久国产免费,99久久国产免费大片 | 色欧美日韩 | 精品国产成人在线影院 | 97偷拍视频| 99激情网| 2023亚洲精品国偷拍自产在线 | 亚洲三级视频 | 欧洲色吧 | 久久 精品一区 | 免费在线观看不卡av | 欧美午夜精品久久久久久浪潮 | 成人在线视频观看 | 久操视频在线免费看 | 麻豆视频免费在线播放 | 成人网色 | 成年人黄色免费视频 | 国产一区二区观看 | 国产自产在线视频 | 一区二区中文字幕在线观看 | 美女免费网站 | 亚洲色图美腿丝袜 | 国产伦精品一区二区三区在线 | 国产精品福利在线观看 | 黄色影院在线播放 | 99视频免费观看 | 欧美日韩综合在线 | 色婷婷综合久久久久中文字幕1 | 日本精品久久久久久 | 欧美另类xxxxx | 久久精品在线视频 | 精品久久免费 | 久久91久久久久麻豆精品 | 丁香婷婷电影 | 91麻豆国产福利在线观看 | 欧美a级一区二区 | 国产精品免费观看网站 | 亚洲精品成人在线 | 国产精品美女在线观看 | 精品久久久999 | 狠狠色伊人亚洲综合成人 | 97精品国产91久久久久久久 | 日本99精品| 亚洲波多野结衣 | 91大神免费在线观看 | 欧美久久99 | 女人高潮特级毛片 | av免费高清观看 | 成人黄色电影免费观看 | 欧美国产一区二区 | 正在播放日韩 | 亚洲综合在线视频 | 久久免费久久 | 精品国产伦一区二区三区 | 99精品免费在线 | 91在线视频 | 国产精品久久毛片 | 久久综合毛片 | 久草久热 | 国产高清免费观看 | 国产视频一区在线免费观看 | 在线色亚洲 | 午夜影院在线观看18 | 最近2019年日本中文免费字幕 | 亚洲精品欧美视频 | 久草在线免费资源 | 伊人狠狠色丁香婷婷综合 | 国产不卡在线视频 | 黄p在线播放 | 伊人五月在线 | 中文字幕a在线 | 网址你懂的在线观看 | 欧美日韩另类视频 | 欧美日韩在线免费观看视频 | 在线免费观看麻豆视频 | 久久久一本精品99久久精品 | 久久经典国产 | 在线亚洲日本 | 国产精品电影一区二区 | 久久免费视频在线观看30 | 成人动漫精品一区二区 | 亚洲黄色区| 亚洲精品在线观看免费 | 九九涩涩av台湾日本热热 | av一级黄| 亚洲婷婷在线视频 | 99久久99久国产黄毛片 | 天天操天天操天天爽 | 99成人免费视频 | www视频免费在线观看 | 欧美在线观看视频免费 | 狠狠干中文字幕 | 久久视频免费在线观看 | 国内外成人在线 | 久久精品视频网 | 国产a国产a国产a | 麻豆传媒视频在线播放 | 亚洲精品国产成人 | 国产精品久久久久久久久久久久冷 | 亚欧洲精品视频在线观看 | 日韩综合精品 | 天天插天天爱 | 欧美大片第1页 | 国产九色在线播放九色 | 在线黄色av| 在线视频 亚洲 | 狠狠色婷婷丁香六月 |