diff --git a/README.md b/README.md index 2d49722..709cf64 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,8 @@ libc6-amd64_2.27-3ubuntu1_i386.so - v1.2 -- Updata install.sh. Now the installation can be finished in seconds. +- v1.3 -- fix a bug about local libc with symbolic link. Thanks to [f0110vv3r](https://github.com/f0110vv3r) + ### more - Though it works perfect on [libc-databases](https://github.com/niklasb/libc-database) now(*Alpha-v1.0*). But I'm not sure whether it works well on other libcs so issues are welcome. diff --git a/install.sh b/install.sh index b668694..688d20e 100644 --- a/install.sh +++ b/install.sh @@ -3,6 +3,6 @@ wget -q https://raw.githubusercontent.com/0x01f/main_arena_offset/master/main_ar sudo mv main_arena /usr/local/bin/main_arena sudo chmod +x /usr/local/bin/main_arena echo "Done! Enjoy it!" -echo "Usage:" +echo -n "Usage:" echo -e "\033[0;35m$\033[0m \033[01;31mmain_arena\033[0m \033[1;32myour_libc_path\033[0m" echo "Star it on github if you like it." diff --git a/main_arena b/main_arena index c92e7cd..340c87d 100755 --- a/main_arena +++ b/main_arena @@ -2,8 +2,8 @@ # set -eux :< DESCRIPTION @@ -58,17 +58,24 @@ function printInfo() getOffset function getOffset() { - mallocHook=$(objdump -j .data -d $1|grep __malloc_hook@ |cut -d " " -f 1) + libc=$1 + # deal with local libc(in case of symbolic link) + if [[ $(file $libc) =~ "symbolic link" ]] + then + libc=$(dirname $libc)"/"$(readlink $libc) + fi + + mallocHook=$(objdump -j .data -d $libc|grep __malloc_hook@ |cut -d " " -f 1) let mallocHook=16#$mallocHook # 32-bit - if [[ $(file $1) =~ "32-bit" ]] + if [[ $(file $libc) =~ "32-bit" ]] then let mainArena=($mallocHook+0x18) printInfo "$mallocHook" $mainArena fi # 64-bit - reallocHook=$(objdump -j .data -d $1|grep __realloc_hook@ |cut -d " " -f 1) + reallocHook=$(objdump -j .data -d $libc|grep __realloc_hook@ |cut -d " " -f 1) let reallocHook=16#$reallocHook ((offset=$mallocHook-$reallocHook)) @@ -77,6 +84,6 @@ function getOffset() } :<