androguard를 이용하여 code_item 을 추출하여 txt파일로 저장
dex, data section, code_item의 구조
from androguard.core.bytecodes.apk import APK
from androguard.core.bytecodes.dvm import DalvikVMFormat
from androguard.core.bytecodes.dvm import ClassDefItem
a = APK("C:/Users/jysrm/OneDrive/바탕 화면/study/test.apk")
f = open("new.txt", 'w')
d = DalvikVMFormat(a)
code_item = d.get_codes_item()
code = code_item.show()
f.write(code)
f.close()
apk파일의 code_item을 추출하는 소스코드이다.
하지만 위와같이만 작성하면 오류가 발생한다.
show()함수가 code_item을 출력만하기때문에 헤더파일에서 변경을 해줘야 한다.
class CodeItem(object):
dvm파일에서 위의 클래스를 찾은다음
def show(self):
# FIXME workaround for showing the MAP_ITEMS
# if m_a is none, we use get_raw.
# Otherwise the real code is printed...
# bytecode._PrintDefault("CODE_ITEM\n")
# bytecode._PrintDefault(binascii.hexlify(self.get_raw()).decode("ASCII"))
return binascii.hexlify(self.get_raw()).decode("ASCII")
# bytecode._PrintDefault("\n")
show()메소드를 반환값으로 code_item을 돌려주게 변경해준다.
변경 후 맨 위의 소스코드를 실행해 보면 오류가 발생하지 않는다.
'Python' 카테고리의 다른 글
Python Thread (0) | 2019.08.09 |
---|