본문 바로가기
Python

[androguard]code_item 추출하기

by usang0810 2019. 5. 14.

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