블로그 이미지
Flying Mr.Cheon youGom

Recent Comment»

Recent Post»

Recent Trackback»

« 2025/5 »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

 
 

[리버싱] 심볼제거 정보

보안/리버싱 | 2013. 9. 9. 12:43 | Posted by youGom

 

출처 ;

http://verysimple.org/wiki/moin.cgi/HideDebugSymbol#fndef-789cb63c063e4d9502bddcaf0d2e4ecef8e9de1b-0

 

 

JNI native 프로젝트인 경우

  • Java로만 구성된 프로젝트와는 달리 <<JNI>> native 가 추가되면 <<ProGuard>>에서 Java와 동시에 Native쪽까지 처리해주지 못한다.

  • JNI 쪽에 등록된 함수명을 ProGuard가 임의로 바꾸면 안된다. --> ProGuard 측에서 특정 함수명을 바꾸는 것을 금지하도록 설정할 수 있다.

Native 측의 디버깅 심볼 숨기기

  • so 파일에 심볼이 존재하는 지 확인하는 방법
    1. apk은 zip 압축방식과 동일하므로 zip프로그램으로 압축을 푼다.
    2. 압축 푼 lib/armeabi 폴더 밑에 *.so 파일을 확인한다.
    3. objdump.exe1 나 readelf.exe1 를 이용해서 so 파일 안에 심볼이 존재하는지 확인

      • objdump -S *.so
        혹은
        readelf -Wa *.so
  • so 파일의 심볼을 지우기
    1. gcc 컴파일 옵션 추가
      • Android.mk 파일에 디버깅 심볼을 지우는 옵션 추가
        LOCAL_CFLAGS    := -fvisibility=hidden

        어떤 PC에서는 되고2 어떤 PC에서는 심볼이 모두 통체로 사라진다. --> NDK 버전 문제로 추측된다.

    2. strip1 파일로 so 파일에서 직접 심볼을 지우기

iPhone

어뷰징 이슈

  • 탈옥된 폰에서 아래와 같은 방법으로 어뷰징을 할 수 있음
    • 공격방법 : 탈옥된 디바이스에서 gdb를 이용한 디버깅, jump 명령어로 내부함수를 직접호출하면 인터럽트가 발생할 때까지 해당 함수가 반복되어 곧바로 최고 레벨을 달성할 수 있습니다.
      (gdb) info functions
      ... (생략) ...
      0x00023ebc LevelUp
      0x000d3a08 GetItem
      ...(생략) ...
      (gdb) call LevelUp
      $1 = {<text variable, no debug info>} 0x23ebc <LevelUp>
      (gdb) jump LevelUp --> LevelUp() 함수 반복 수행으로 레벨200 달성
      Continuing at 0x23ecc.
      
      (gdb) p (int) GetItem(20) --> 아이템 생성
      $1 = 1
      (gdb) p (int) GetItem(21)
      $2 = 1
      (gdb) p (int) GetItem(22)
      $3 = 1

원인

  • 실행 바이너리 파일에 심볼 정보가 남아있어서 발생하는 문제.
:

Bada App - FrameWork Concept

소프트웨어 공학/설계 | 2011. 9. 21. 13:20 | Posted by youGom

장점.
1. FrameWork의 일관성이 유지되어, 개발 시 상호간 인터페이스에 대해 오해의 소지가 사라진다.
 - 다른 모듈에 대해서 Request만 하면 된다. 다른 모듈에 대한 이해가 필요 없다.
2. Framework의 일관성에 대한 개념을 이해하면, 모든 Framework에 대해 이해가 가능해진다.
3. 최소한의 단위로 테스트가 가능하다. ( 모든 코드는 테스트 되어 진다. )
4. 검증팀에서 검증하기 전에, 버그에 대한 진단이 자동화 테스트에 의해 자동으로 감지 된다.
5. 컴파일 시간이 줄어든다. ( 기능 추가가 될수록 파일 추가 및 수정이 잦아지는데, h파일을 수정하더라도, 전체 컴파일을 하지 않는다. 즉, 코드 결합도가 굉장히 낮다. )

단점.
1. Framework에 맞추어 개발하기 위한 대한 기본 이해가 필요하다. ( 구현하기 위한 진입 장벽이 높으나, 타 모듈 개발자가 사용하기엔 편하다. )




현황.
아래 코드는 테스트완료된 코드이며, 실질적으로 사용가능하다.
이 Framework 코드는 Bada SDK 코드에 종속적이며, 다른 플랫폼에서는 사용이 불가하다.

[ 앱의 시작 ]
way 1. GetManager( _C( "ManageForms" ) )->Request( _C( "FormStartDevMode" );
way 2. GetFormMgr()->Request( _C( "FormStartDevMode" );

[ 데이터 요청 ]
way 1. GetManager( _C( "ManageDB" ) )->Request( _C( "CreateDB" ), 0, pCompleteListener );
way 2. GetDBMgr()->Request( _C( "CreateDB" ), 0, pCompleteListener );

[ 데이터 처리 ]
way 1.  GetManager( _C( "ManageFilter" ) )->Request( _C( "FilterMessage" ), FILTER_MESSAGE_NORLMAL, pCompleteListener );
way 2. GetFilterMgr()->Request( _C( "FilterMessage" ), FILTER_MESSAGE_NORLMAL, pCompleteListener );


'소프트웨어 공학 > 설계' 카테고리의 다른 글

[수강후기] CBD, Component Based SW Design  (0) 2012.09.02
[POSA1] Broker Architecture Pattern  (0) 2011.10.07
:
이클립스에서 쓰레드 컴파일할 때 설정방법

makefile을 손보는 건데.. 이클립스는 makefile을 설정한 내용을 가지고 자동 생성해준다.
다음과 같이 설정 해주면 된다.


아래와 같이 했는데, 속도차이가 없었다;; ㅋㅋㅋ
1. 프로젝트 properties 진입
  a. C/C++ Build
    i. Settings
    ii. C++ / C 의 Miscellaneous ( 둘 다 )
      -> Flags에 [ -lpthread ] 추가
  b. Run/Debug Settings
    i. 프로젝트 선택 후 [ Edit ] 클릭
    ii. Arguments 탭 선택
      -> Program arguments 에 [ -lpthread ] 추가
 
 

아래와 같이 했더니, 엄청난 속도와 CPU 점유율 100%를 경험할 수 있었다.
1. 프로젝트 properties 진입
  a. C/C++ Build
   -> use default 체크 해제
   -> cs-make -j8 ( cs-make -j[N] )
: N개 만큼 쓰레드가 생성된다. 








 

'소프트웨어 공학 > 개발' 카테고리의 다른 글

Subversion 설치 및 Eclipse와의 연동  (0) 2011.11.04
[ELF] OpenSource Enlightenment DeskTop  (0) 2011.10.14
표준 Dispose 패턴을 구현하라.  (0) 2011.10.06
[패턴] Layer Architecture Pattern  (0) 2011.10.01
c++ 고급  (0) 2011.08.24
: