김보안의 블로깅
  • 🏠 Home
  • 📚 Project
    • Blockchain
      • 🎦 PickMe
      • 🎦 IoTC
      • 🎦 Blackchain
      • 📃 Gemology
      • 🎦 PickMe
      • 🎦 PickMe
    • AI
      • 👋 A.I. Dream Reader
      • 🎦 A.I. Dream Reader
    • Security
      • 🎦 SNAC
    • Education
      • 🎦 Smart Lecture
  • 🤸‍♂ Hobby
    • Music
      • Violin
      • Guitar
      • Piano
      • Drum
    • Flower
      • Flower Certificate
    • Sport
      • Ski
      • Skateboard
      • Golf
      • Boxing

2016년 1월 22일 금요일

Android so file decompile & patch

 SecureKim     오후 1:08     androd shared library, android, ARM, assemble, Decompile, IDA, patch, so     No comments   


-안드로이드 Native (C, C++) .so 파일 디컴파일 하기-

IDA와 Hex ray 가 필요하다. Hex ray는 코드를 잘 정리해서 보여주는데

이게 없으면 디컴파일이 한층 더 힘드니 있는게 좋다.


그리고 원래 IDA 에서 Edit - Patch program - Assemble 을 하면

어셈블리어를 쉽게 조작 할 수 있는데, 안드로이드 so파일에 시도하면

ARM 프로세서 모듈이라면서 안해준다.



그래서 어셈블리어 레벨에서 패치는 불가하고, 기계어 레벨 패치를 해야 한다.

근데 ARM 기계어는 잘 정리된 곳을 못 찾았고

내가 쓸 코드는 MOVS, CMP, BEQ, BNE 정도 밖에 안되서 그냥 노가다로 정리 했다.

--- MOVS R0 는 기계어로 0x20 ---

MOVS R0, #1 -> 1을 R0에 저장
0x01 0x20

MOVS R1, #0
0x00 0x21

MOVS R2, #0
0x00 0x22

MOVS R2, #0x10
0x10 0x22

MOVS R3, #0
0x00 0x23

MOVS R7 R4
0x27 0x1C

MOVS R0 R5
0x28 0x1C

--- CMP R0 는 기계어로 0x28 ---

CMP R0, #0 -> R0 가 0 이면 플래그 0
0x00 0x28

CMP R3, #0
0x00 0x2B

CMP R3, #6 -> R3 이 6 이면 플래그 0
0x06 0x2B

CMP R0, R3
0x98 0x42

---BEQ, BNE 는 각각 기계어로 0xd0, 0xd1---

BEQ loc_7E4C -> 플래그 값이 0이면 점프
0x07 0xD0

BNE loc_7E52 -> 플래그 값이 0이 아니면 점프
0x04 0xD1

---------------------------------------------------

다행히 기계어 코드 패치는 프로세서에 관계없이 IDA에서 가능하다.

Edit - Patch program - Change byte 하고 Apply patches to input file 을 하면 적용 된다.


이제 한번 시험삼아 도전해 본다.



저 네모박스를 다음과 같이 고칠 것이다.

1. MOVS R0, #0     //return 에 0 복사
2. CMP R0, #0       //return 값이 0이면 Flag 0
3. BEQ loc_ret        //Flag 0 이면 loc_ret 로 이동 (loc_ret은 임시로 붙인 이름)


그럼 리턴값에 0을 넣고 특정 위치로 점프한다.

단순히 NOP로 채운게 아니라서 다시 복구하거나 다른 곳으로 점프시키기도 쉽다.


먼저 1, 2번을 아까 노가다로 알아낸 기계어로 패치하면 다음과 같다.



이제 3번 BEQ점프를 하면 되는데 이것도 단순히 주소를 빼면 안되서

직접 한칸 두칸 점프해 보면서 식을 구해 보았다.

X = (목적지 주소 – 출발지 주소 – 2)/2 - 1 


나는 00007E2A 에서 00007F1A 로 점프할거니까 위 식으로 계산해보면 0x76 이 나온다.



기계어 코드 패치하고 그래프를 확인 해 보면 새로운 분기가 생긴 것을 확인 해 볼 수 있다.




처음 해 보는거라 뭔가 노가다가 많이 들어갔지만 나름 재미있었고 유용할 것 같다.



Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg

2016년 1월 20일 수요일

APK to Java in Node.js

 SecureKim     오전 10:36     APK to java, Node.js     No comments   


Node.js 에서 APK 파일을 읽어서 Java 파일로 만들어 줍니다.

js 파일과 같은 위치에 programs 폴더가 있어야 하고

그 안에 7-Zip, dex2jar-2.0, jd-cli-0.9.1 프로그램이 있어야 하고

apk, sources 폴더가 있어야 합니다.

apk 폴더 안에 풀고 싶은 apk 파일을 넣고 인자로 주면 sources에 풀립니다.

제가 만들었고 라이센스 없습니다.


apk2java

exports.apk2java = function(apkName){

var nodePath=process.cwd();
var programsPath=nodePath+"\\programs";
const exec = require('child_process').exec;


var d = new Date();
var folderName=d.getTime();
var srcPath=programsPath+"\\sources\\"+folderName;
 
 console.log("Start APK -> Zip -> dex");
 exec(programsPath+"\\7-Zip\\7z.exe x \""+programsPath+"\\apk\\"+apkName+"\" -y -o"+srcPath, (err, stdout, stderr) => {
  if (err) {
   console.error(err);
   console.log("End - Fail.");
   return;
  }
  if(stderr){
   console.log("stderr");
   //console.error(stderr);
  } 
   console.log("Start APK -> Zip -> dex -> jar");
   exec(programsPath+"\\dex2jar-2.0\\d2j-dex2jar.bat "+srcPath+"\\classes.dex "+"-o "+srcPath+"\\classes.jar", (err, stdout, stderr) => {
  if (err) {
   console.log("err");
   console.error(err);
   console.log("End - Fail.");
   return;
  }  
  if(stderr){
   console.log("stderr");
   //console.error(stderr);
  } 
  console.log("Start APK -> Zip -> dex -> jar -> java");
  exec("java -jar "+programsPath+"\\jd-cli-0.9.1\\jd-cli.jar -od "+srcPath+"\\javaSrc "+srcPath+"\\classes.jar", (err, stdout, stderr) => {
   if (err) {
    console.error(err);
    console.log("End - Fail.");
    return;
   }  
   if(stderr){
    console.log("stderr");
   } 
   //console.log(stdout);
   console.log("End - Success.");
   
  });
   });
 });
}
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg

2016년 1월 8일 금요일

MITM을 위한 Proxy 설정방법

 SecureKim     오전 10:16     MITM, Network, proxy, Security     No comments   


ARP Spoofing이 안되는 경우 ( 정책 상 Blocking 되는 경우)

iptables를 이용하면 됩니다.

iptables -t nat -A OUTPUT -p tcp -o wlan0 -j DNAT --to ip:port

주의 할 것은, 모든 tcp 통신을 포워딩 하기 때문에

DNS 쿼리도 이곳으로 날리게 됩니다.

따라서 먼저 한번 접속해서 도메인 이름을 알도록 하거나

--dports 80,443 등 옵션을 추가해 주는 것이 좋습니다.


Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg

2016년 1월 4일 월요일

Network Ping Batch - 윈도우 네트워크 핑 스크립트

 SecureKim     오전 10:07     Batch, Network, windows     No comments   

네트워크 상태를 ping을 통해 시각적으로 보여주는 배치파일입니다.

(왼쪽 IP에는 Ping이 안나가고 있고, 오른쪽 IP 에는 Ping이 나가고 있습니다.)


제가 만들었고 라이센스 없습니다.

---------------------------------------------------------------
@echo off
title %1
:start
color
set t=%time:~-5%
set pingIP=%1
set cnt=0
:re
set /a cnt+=1
cls
echo -^> %pingIP%
if %cnt% EQU 1 echo State : /
if %cnt% EQU 2 echo State : ―
if %cnt% EQU 3 echo State : \
if %cnt% EQU 4 (
echo State : |
set cnt=0
)
ping %pingIP% -n 1 >nul
if %errorlevel% EQU 0 (
color 03
) else (
color 04
)
ENDLOCAL
goto re
---------------------------------------------------------------




아래는 ICMP 스캔입니다. 192.168.0 까지 입력하면
192.168.0.1 ~ 192.168.0.255 까지 스캔 해 줍니다.
---------------------------------------------------------------
@echo off
set a=1
echo 스캔을 원하는 아이피 대역
set /p ip=
:start
ping %ip%.%a% -n 1 | find "의 응답" >> scan.txt
echo ping to %ip%.%a%
set /A a+=1
if %a% NEQ 255 goto start
:end



Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
최근 게시물 이전 게시물 홈

페이지

  • 홈
  • Hobby

Categories

  • AI
  • AWS
  • Blockchain
  • Hardware
  • Javascript
  • Node.js
  • Plasma
  • Security
  • Study
  • Video
  • android
  • mysql
  • review
  • windows

Popular Posts

  • 회사 프록시와 인증서에 고통받는 그대를 위한 글 (Bash, Gradle, Python, wget, nodejs(npm), apt-get, cURL, git, yarn, androidStudio)
    대기업에 입사하면 장단점이 있는데, 단점 중에 하나가 회사에서 프록시를 사용하여 트래픽 감시를 하므로 프록시 설정을 해주어야 한다는 점 입니다. 특히, 회사에서는 https 트래픽도 감시를 하므로 인증서도 설정해 주어야 합니다. 그런데 문...
  • 다빈치리졸브로 영상의 음성 보정 (잡음 노이즈 없애기)
      잡음 없애는 방법 1. 음악 쪽 들어가서 음악에서 소스 우클릭 - Normalize Audio Levels 2. 우측의 Mixer에서 Dynamics 더블클릭, Effects아래 +누르고 Metering에 Meter 그럼 아래처럼 나오는데  Gat...
  • 블랙보드 강의 녹화 영상 다운로드 가능한 방법 (노설치)
    별도의 설치도 필요 없고 아주 쉽습니다. 구글 크롬브라우저 에서 블랙보드 녹화 영상에  다운로드 가능한 메뉴가 나오게 하는 코드입니다.  먼저 블랙보드 강의자료에 입장하고, 재생 버튼을 클릭 하지 않은 상태로 F12 를 입력합니다. 재생을 클릭하지 마...

Blog Archive

  • ►  2024 (2)
    • ►  11월 (2)
  • ►  2023 (2)
    • ►  10월 (1)
    • ►  1월 (1)
  • ►  2022 (10)
    • ►  12월 (1)
    • ►  11월 (3)
    • ►  9월 (1)
    • ►  8월 (1)
    • ►  6월 (2)
    • ►  3월 (2)
  • ►  2021 (9)
    • ►  12월 (3)
    • ►  11월 (1)
    • ►  6월 (1)
    • ►  5월 (2)
    • ►  4월 (2)
  • ►  2020 (12)
    • ►  10월 (1)
    • ►  9월 (2)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (5)
    • ►  4월 (1)
    • ►  2월 (1)
  • ►  2019 (14)
    • ►  10월 (2)
    • ►  7월 (1)
    • ►  3월 (4)
    • ►  2월 (2)
    • ►  1월 (5)
  • ►  2018 (14)
    • ►  12월 (2)
    • ►  11월 (4)
    • ►  10월 (1)
    • ►  8월 (2)
    • ►  5월 (4)
    • ►  1월 (1)
  • ►  2017 (12)
    • ►  10월 (2)
    • ►  9월 (9)
    • ►  5월 (1)
  • ▼  2016 (8)
    • ►  10월 (2)
    • ►  8월 (1)
    • ►  6월 (1)
    • ▼  1월 (4)
      • Android so file decompile & patch
      • APK to Java in Node.js
      • MITM을 위한 Proxy 설정방법
      • Network Ping Batch - 윈도우 네트워크 핑 스크립트
  • ►  2015 (6)
    • ►  12월 (3)
    • ►  10월 (1)
    • ►  6월 (1)
    • ►  5월 (1)
  • ►  2014 (10)
    • ►  11월 (1)
    • ►  9월 (1)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (3)
    • ►  4월 (1)
    • ►  3월 (2)
  • ►  2013 (28)
    • ►  12월 (3)
    • ►  11월 (6)
    • ►  10월 (6)
    • ►  9월 (6)
    • ►  8월 (1)
    • ►  7월 (3)
    • ►  6월 (3)

구독

글
Atom
글
전체 댓글
Atom
전체 댓글

로드 중입니다...

각오

직접 해보지 않은 것은 포스팅 하지 않겠습니다.

Copyright © 김보안의 블로깅 | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates