@@ -17,22 +17,6 @@ CROSS := arm-none-eabi-
17
17
18
18
RUN_CLI_DIR := /data/local/tmp
19
19
20
- shellcode.o : shellcode.lds shellcode.S
21
- echo ' .ascii "Built at $(shell date)"' > buildts.S
22
- $(CROSS )$(CC ) $(CFLAGS ) -nostdlib -o $@ $^
23
-
24
- shellcode.bin : shellcode.o
25
- $(CROSS )$(OBJCOPY ) -O binary -j .text --reverse-bytes=4 $< $@
26
-
27
- shellcode.bin.h : shellcode.bin
28
- $(XXD ) -i $^ > $@
29
-
30
- shellcode.addr.h : shellcode.o
31
- $(READELF ) -e $< | $(AWK ) ' /Entry point/ { print "tgt_addr_t shellcode_addr = "$$NF";" }' > $@
32
-
33
- exploit : main.c shellcode.bin.h shellcode.addr.h
34
- $(CC ) $(CFLAGS ) -I$(CURDIR ) -o $@ $<
35
-
36
20
decrypt : decrypt.c
37
21
$(CC ) $(CFLAGS ) -o $@ $< -lcrypto
38
22
@@ -49,24 +33,49 @@ threaddump.txt:
49
33
threaddump.lds : threaddump.txt
50
34
$(PERL ) -nE ' say sprintf("%s = 0x%08x;", $$2, hex($$1)-hex($$3)) for /\[<(.*?)>\] \((.*?)\+0x(.*?)\//' < $< | sort -u | sort -k3 > $@
51
35
36
+ zImage :
52
37
dtv_driver.ko :
53
38
echo " Grab $@ from firmware dump (all copies are the same)" ; exit 1
54
39
55
- EXPECT_SYM =_Cust_dump_all_thread
40
+ kernel.lds : zImage kernelutil
41
+ ./kernelutil -dump_symtab=$@ $<
42
+
43
+ MATCH_SYM =_Cust_dump_all_thread
56
44
dtv_driver.lds : dtv_driver.ko threaddump.lds
57
45
set -x; \
58
46
vma=$$( $(CROSS ) objdump -t dtv_driver.ko | \
59
- actual=$$($(PERL ) -nE 'say $$1 if /^$(EXPECT_SYM ) = (.*) ; /' < threaddump.lds) \
60
- $(PERL ) -nE ' say sprintf("0x%08x", hex($$ENV{actual})-hex($$1)) if /(.*?) .*$(EXPECT_SYM )/' \
61
- ); echo VMA: $$ vma; if [ x" $$ vma" = x ]; then echo $( EXPECT_SYM ) not found, check $^; exit 1; fi ; \
47
+ actual=$$($(PERL ) -nE 'say $$1 if /^$(MATCH_SYM ) = (.*) ; /' < threaddump.lds) \
48
+ $(PERL ) -nE ' say sprintf("0x%08x", hex($$ENV{actual})-hex($$1)) if /(.*?) .*$(MATCH_SYM )/' \
49
+ ); echo VMA: $$ vma; if [ x" $$ vma" = x ]; then echo $( MATCH_SYM ) not found, check $^; exit 1; fi ; \
62
50
$(CROSS ) objdump --adjust-vma=$$ vma -t dtv_driver.ko | \
63
- $(PERL ) -nE ' say "$$2 = 0x$$1;" if /^(\S +)\s+g \s.*\s(\S+)$$/' | \
51
+ $(PERL ) -nE ' say "$$2 = 0x$$1;" if /^([0-9a-f] +)\s+. \s.*\s(\S+)$$/ && hex($$1) > 0 ' | \
64
52
sort -k3 > $@
65
53
54
+ LOAD_SYM =_CmdVersion
55
+ shellcode.lds : shellcode.lds.in dtv_driver.lds
56
+ loadaddr=$$($(PERL ) -nE 'say $$1 if /^$(LOAD_SYM ) = (.*) ; /' < dtv_driver.lds) \
57
+ $(PERL ) -pe ' s/#LOADADDR#/$$ENV{loadaddr}/g' < $< > $@
58
+
59
+ shellcode.o : shellcode.lds dtv_driver.lds kernel.lds shellcode.S
60
+ echo ' .ascii "Built at $(shell date)"' > buildts.S
61
+ $(CROSS )$(CC ) $(CFLAGS ) -nostdlib -o $@ $^
62
+
63
+ shellcode.bin : shellcode.o
64
+ $(CROSS )$(OBJCOPY ) -O binary -j .text --reverse-bytes=4 $< $@
65
+
66
+ shellcode.bin.h : shellcode.bin
67
+ $(XXD ) -i $^ > $@
68
+
69
+ shellcode.addr.h : shellcode.o
70
+ $(READELF ) -e $< | $(AWK ) ' /Entry point/ { print "tgt_addr_t shellcode_addr = "$$NF";" }' > $@
71
+
72
+ exploit : main.c shellcode.bin.h shellcode.addr.h
73
+ $(CC ) $(CFLAGS ) -I$(CURDIR ) -o $@ $<
74
+
66
75
.PHONY : run-cli
67
76
run-cli : cli
68
77
$(ADB ) push cli $(RUN_CLI_DIR ) /cli && $(ADB ) shell $(RUN_CLI_DIR ) /cli $(CLICOMMAND )
69
78
70
79
.PHONY : clean
71
80
clean :
72
- rm -f * .o * .bin * .bin.h * .addr.h buildts.S $(ALL_BINARY_TARGETS )
81
+ rm -f * .o * .bin * .bin.h * .addr.h buildts.S * .lds $(ALL_BINARY_TARGETS )
0 commit comments