2019. 7. 1. 13:02

자신의 텔레그램 채팅 아이디 손쉽게 확인하기!

개인적으로 확인할 일이 가끔 생기는데 그때마다 찾기가 서비스로 띄워둡니다.

누군가에겐 도움이 되길~

상단 검색창에 "@myidisbot" 검색 후 하단 검색 내역중 "hElLoOnG's Identify Me" 봇 선택

 

START 버튼 터치 또는 클릭

 

"chat id" 항목의 숫자가 자신의 채팅ID

 

Posted by 땡보
2018. 12. 24. 12:56

CentOS7에 MariaDB(Mysql)을 설치해 사용시 한글깨짐 현상 해결방법.

인터넷에 검색시 거의 모든 곳에서 utf8로 설정시 한글이 깨짐이 해결 된다고 기술 되어 있으나

나의 경우 해결되지 않아 내 해결 방법을 기록한다.


핵심은 /etc/my.cnf 환경 설정에서 init_connect="SET NAMES euckr"로 값을 셋팅하는게 핵심이다.


가. 사용환경

- OS버전: CentOS 7.3


- DB버전: MaraiDB(Mysql) 15.1


- MariaDB(Mysql) 환경설정[/etc/my.cnf]


- Window ODBC 캐릭터셋


위와 같이 설정후 mysql 서비스를 재시작하고, DB 재접속시 한끌깨짐 현상이 제거 되었다.


누군가에겐 도움이 되길..



'Study > database' 카테고리의 다른 글

[Mysql]초기 셋팅시 비밀번호 재설정  (0) 2013.08.04
[Sybase]계정 연결 세션보기  (0) 2012.09.15
Posted by 땡보
2018. 5. 11. 12:23

>>재미로 구현해본 내용이며, 현재 동작하지 않습니다<<

 

우리는 그 성취감에 도취되어 있을뿐 악의적인 목적은 없다!

 

0x01. 올파일포유서비스 소개

인터넷상의 유료웹하드 파일이즈(http://fileis.com) 사이트를 미러링 하여, 모바일 / PC상에서 공짜로 원하는 영화, 드라마, TV, 유틸 등의 파일을 마음껏 다운로드 할 수 있도록 도와주는 서비스

 

0x01-1. 720HD로 크게 보셔도 제대로 안보여요 하지만 나름 소리도 나와요!!

  - 자세히 보아야 보인다. 오래보아야 이해된다. 너도 그렇다. ㅡㅡ;;

 

0x02. 서비스 사용법

  0x02-1. 텔레그램 찾기에 "helloongfile" 검색

  0x02-2. start 버튼 클릭 또는 "/시작" 명령으로 인증요청

  0x02-3. 관리자 인증 승인 후 "/도움말" 명령어 사용 후 시작

 

0x03. 핵심기능

  0x03-1. 파일이즈 핵심 기능 봇 래핑

    - 사용자 인증, 관리, 파일 다운로드, 다운로드 완료 알림

  0x03-2. 전용브라우저 제작

    - 로컬 프록시 서버 구성 후 파일이즈 사이트로의 요청/응답 내용을 수정 서버내 포터블 다운로드 모듈 및 텔레그램 봇과 연동, 다운로드 할 수 있도록 기능 구현

 

0x04. 장점

  0x04-1. 경제성!! 사용자는 공짜!! 운영자만 유료라는 백년에 한번 나올까말까한 사상 초유의 마진구조 운영자의 다퍼주고 깔끔하게 떠나겠다!!라는 마인드가 십분 반영된 서비스 사용자는 운영자가 결제한 사이트를 미러링 받으므로 공짜!!

  0x04-2. 접근성!! 모바일로도 언제 어디서나 검색 / 다운로드 / 시청 가능(단, 데이터 무제한 요금제 또는 WIFI 사용시만)

  0x04-3. 보안성!! 웹하드 / 토렌트 시드공유 사이트등에서 유포되는 악성코드 또는 그리드웨어 설치 위험 감소

    - 실제 파일이즈 다운로드 전용프로그램 설치시 사용자 몰래 시스템 백그라운드에 숭악한 그리드웨어 설치

 

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑사용자는 요기까지만↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓개발과정 및 소스가 필요하신 분들은 요리로↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

0x05. 잡담

  0x05-1. 올파일포유 동작구조 삼줄 요약

- 텔레그램 메신져 동작 

  요청: 텔레그램 메신져 ===> 올파일포유 메신져 데몬 ===> 진짜파일이즈 웹하드

  응답: 진짜파일이즈웹하드 ===> 올파일포유 메신져 데몬 ===> 텔레그램 메신져

 

- 전용브라우저

  요청: 전용브라우저 ===> 올파일포유 웹서버 데몬 ===>진짜파일이즈 웹하드

  응답: 진짜파일이즈 웹하드 ===> 올파일포유 웹서버 데몬 ===> 전용브라우저

 

  0x05-2. 분석과정

1. 크롬 개발자 도구[F12]를 사용하여 고속다운로드버튼 Onclick() 이벤트 확인

그림1

 

2. do_down_confirm ==> down_confirm_layer.php 로 리다이렉팅

그림2

 

3. Fiddler[https://www.telerik.com/fiddler]로 http 통신 디버깅

  - 서버단의 down_confirm_layer.php에서 파라메터인 파일아이디, 사용자아이디 결제방법을 이용하여 실결제가 이루어지고, 이후 익스플로러인지 기타 브라우저인지 체크하는 로직들이 포함된 do_down()으로 분기

그림3

 

4. do_down javascript function()에서 check_and_downoad() 호출[호출시 down_init.php 파라메터 포함]

그림4

 

5. 서버단의 down_init.php에서 down_confirm_layer.php 결제후 생성된 구매아이디를 사용자 정보와 함께 응답값으로 생성해 실제 다운로드런처를 실행하는 nfile_download()로 분기

그림5

 

6. 이후 SLB() 함수등을 거쳐 네비게이팅중인 브라우저가 익스플로러인지, 기타 브라우저인지 판단 후 기타브라우저 일 경우 down_multbrowser.php로 분기하여 기타 브라우저에서 웹하드 다운로드 런처를 실행하기 위한 꼼수인 로컬 웹서버를 호출할 페이지를 제작 후 강제 전송함.

이때 생성되는 페이지는 아래와 같으며, 이 페이지는 보이는 대로 127.0.0.1(로컬호스트)의 9696포트로 전송되어짐.

그림6

이 요청을 처리하는 웹서버는 FileisLocal.exe이며, 파일이즈 웹페이지상의 다운로드 모듈 설치시 설치되어지는 실행파일 중 하나임. 해당 실행파일은 FileisService.exe라는 실행파일로 윈도우 서비스 페이지에 등록되어지며, OS기동시 해당 서비스에 의해 런칭되어져 항시 상주하게 됌

FileIsLocal.exe가 해주는 역할은 FileIsWebCtrl.dll이 하는 역할과 동일하며, 업로드 런처, 다운로드 런처 등이 프로세스상에 존재하는지 확인 후 없다면 해당 런처들을 기동 후 핸들을 획득하여 동작에 맞는 메세지를 전송하여 사용자의 입력을 파일이즈 런처에 인터페이스 하는 역할을 수행한다. FileIsLocal.exe는 익스플로러 이외의 브라우저에서 위 역할들을 수행하며, FileIsWebCtrl.dll은 익스플로러 브라우저내에서 위 역할들을 수행한다.

 

FileIsWebCtrl.dll은 익스플로러로 해당 웹사이트 서핑시 아래와 같은 자바 스크립트에 의해 구동되며 해당 라이브러리의 동작은 FileIsLocal과 동일하다. 해당 dll은 일반적인 ActiveX와 동일하게 레지스트리상에서 클래스 ID로 검색이 가능하며 아래와 같은 경로에 존재하는 것을 알 수 있다.

그림7

 

그림8

 

그림9

 

그림10

 

 

그럼 다운로드 런처가 기동되는 방법을 알았으니 해당 런처를 분석하여 이후 어떤 과정으로 다운로드가 이루어 지는지 확인 해보자.

 

먼저 그림7~10에 걸쳐 브라우저별로 실제 다운로드를 실행할 모듈 2개중 어느 모듈을 분석할지 결정을 해야 하는데 결론적으로 보면 어느 모듈을 보든 마찬가지지만 좀더 간편하게 진입점을 찾을 수 있는(사실 너무 간단한 분석이라 동일하지만) ActiveX로 결정을 하고 진행을 하였다. 위의 그림 10에서 찾은 ProgID를 바탕으로 python의 win32com 모듈을 사용하여 간단하게 해당 ActiveX모듈을 메모리에 올린 후 그림7과 동일한 WebCtrl 컨르롤로 선언하여 동일한 파라메터사용 DownLoad() 모듈을 호출하면서 해당 python 프로세스에 x64Dbg를 attach한 후 dll 엔트리포인트 진입시부터 디버깅을 하면 되겠다 추정하며 작업을 시작하였다.

 

python으로 com객체를 연결시키는 작업은 모듈선언을 제외하고는 1줄이면 된다. 쉽다 편하다 눈물이 난다.

import win32com

WEBCTRL = win32com.client.Dispatch("WebControl.WebBBS.1")

이게 다다. ㅡㅡ;; 그럼 호출하는 방법은??

WEBCTRL.DownLoad(user_id, user_pw, 0, file_id, purchase_id, ftp_type, 1)

이게 다다. ㅡㅡ;; 대다나다... 조타 귀도행님에게 감사드린다.

 

각설하고 위 첫번째 코드를 x64dbg를 부착시켜놓은 파이썬 인터프리터에 입력 후 엔터키를 입력하면

해당 dll이 로드되는 것을 볼 수 있으며, dll의 참조 라이브러리에 브레이크 포인트를 걸거나 또는 글로벌 옵션에서

모든 dll 엔트리포인트에서 브레이크 포인트를 발생 시킬 수 있으며 개인취향에 따라 작업하면 된다.

 

위의 작업을 진행후 2번째 줄을 입력하여 트레이싱 하다보면, 금새 아래와 같은 디스어셈블링 코드를 볼 수 있게된다.

그림 11.

 

그림11과 같이 webctrl에서는 Fileis_class_down 이라는 클래스명으로 FindWindowA() Win32Api를 호출 프로세스 리스트상에 FileisDown.exe가 실행중인지를 체크 후 실행중이 아니면 다운로드모듈을 실행하고 실행된 윈도우의 핸들을 반환받고, 이미 실행중이면, 해당 윈도우 핸들에 다운로드 파일에 대한 파일아이디와 구매아이디를 0#<파일아이디#<구매번호#<R 과 같은 문자열로 구성하여 SendMessageA로 전송하고 FileisDown.exe 프로세스에서는 런처에서 보내져온 SendMessage를 디스패치하여 파싱 후 FileisCMC.dll의 다운로드파일정보 추출 및 구매이력 확인등의 로직을 거쳐 NAT.dll 모듈로 실제 다운로드 서버에 접속 후 다운로드를 시도하게 된다. 아래에 앞의 과정들이 진행되는 과정의 스냅샷을 첨부한다.

그림12. FileIsDown.exe가 실행중이지 않을경우 ShellExecuteA() API로 실행하는 부분

그림12에서 FileIsDown.exe가 실행시 실행 파라메터 3개를 가져가며, 아이디, 해쉬패스워드, 알수없는값1 로 실행 됨을 확인하였다. 이를 command prompt상에 입력하면 정상적으로 fileisdown.exe가 실행되는 모습을 볼 수 있다.

 

그림13. 실행되어진 fileisdown.exe의 클래스명이 Fileis_class_down 임을 spy++로 확인

 

그림14. fileiswebctrl.dll에서 fileisdown.exe윈도우로 다운로드할 파일번호와 구매번호를 메세지로 전달

 

그림15. 그림14에서 메세지 전달과 동시에 백그라운드의 다운로드모듈에 해당 파일이 추가되어지는 모습

 

그림 15의 SendMessageA를 spy++로 메세지로그를 캡쳐 후 동일하게 에뮬레이팅 후 아래코드와 같이 포팅하여 동작시켜본 결과 동일한 결과를 얻을 수 있었으나 아래 코드를 사용하지는 않는다. 어차피 webctrl컨드롤에서 전부 알아서 해주니까..

def send_msg_to_fdl(file_id, order_id, ftp):

    logger.debug(get_trace_this_point(9))

    """

    0#<8641664#<2985849#<R

    """

    fileis_hwnd = win32gui.FindWindow("Fileis_class_down", None)

 

    if fileis_hwnd <= 0:

        logger.debug("Not Found Fileis Downloader!!")

        return -1

 

    if len(str(file_id).strip()) <= 0 or len(str(order_id).strip()) <= 0:

        logger.debug("File id and order id should be inputted!!")

        return -1

 

    class CDS(Structure):

        _fields_ = [

            ("dwData", c_void_p),

            ("cbData", c_ulong),

            ("lpData", c_char_p)

            ]

 

    msg = u"0#" + str(file_id) + u"#<" + str(order_id) + u"#<" + str(ftp)

    print(msg)

    print(type(msg))

    msg = bytes(msg, "ms949")

    print(msg)

    print(type(msg))

 

    msg_buf = create_string_buffer(msg)

    print(msg_buf)

    msg_adrs = CDS(0, len(msg_buf), msg_buf.raw)

    print(msg_adrs)

    win32api.SendMessage(fileis_hwnd, win32con.WM_COPYDATA, 0, addressof(msg_adrs))

 

    return 0

 

위의 내용으로 다운로드 모듈의 분석은 종료하며, 추후 시간이되면 다운로드모듈 분석중 발견한 파일이즈 웹하드의 그리드웨어(컴퓨터 리소스 도둑!!)에 대한 부분도 추가토록 하겠다.. 하지만 귀찮아서 아마도... 안하지 않을까... 라는 뭐 그런...... 갱장히 귀찮고 무슨 부귀영화를 누리려고 이러나 싶기도 하고... 머 그냥 알았고 제거했으면 그만인것을.... 암튼 요 숭악무도한 놈이 자행하는 일은 아래와 같다.

그림16. NATservice라는 그리드웨어를 파일이즈 다운로드런처 설치시 몰래 설치해 논 모습

 

저렇게 NATService라는 놈으로 윈도 서비스에도 등록해놓고 방화벽에도 예외로 모든 포트를 개방해놓으며, 은제 으디서던 접근 할 수 있도록 항시 포트를 열고 대기를 하시는 패기넘치는 녀석이시다.. 요놈이 하는 행위와 삭제, 차단 방법은 난제 시간이 나면 공유토록 하겠다.

 

이제 전용브라우저의 간단한 구조를 설명하고 종료해야겠다 너무 길고 힘들고 구찮다... ㅋㅋㅋ 나머진 아래 첨부한 소스 까보시고 혹시 궁금하거나 잘못되어 있거나 이건 뭐 엉망이구나 하는 부분들은 빅태클 주시면 대환영 하겠습니다요.. 뉘예뉘예.. ㅡㅡ;;

 

전용브라우저는 간단하다.. 

1. 로컬 프록시 웹서버를 구성(FiddlerCord.dll) 후 

2. fileis.com 호스트로 오고 가는 모든 요청/응답을 중간에서 가로채서

3. 필요한 스크립트, html소스를 나의 입맛에 맞는 양념을 가미하고, 필요없는 부분을 제거하여 샤샥 원래의 장소로 전송해준다.

요게 끝!! ㅡㅡ;;

 

아아.... 

 

0x06. 소스

  미구현 기능이 있어 풀소스는 6월 둘째주 공개예정 : 동시(1분안쪽 1분이후는 상관없음)에 여러사람이 같은 파일(동일파일ID)을 다운로드 받을 시 선착순 1번을 빼고 나머지사람들의 요청은 영원히 묵살되는 치명적 오류 수정예정 ㅜㅜ

 

현재기준 소스: https://gist.github.com/helloong/e668eb5d1bdb823ef88958a65fba19da

 

 

'Study > python' 카테고리의 다른 글

[연습]모두의 경영 헬퍼  (0) 2015.09.14
[펌]Python code coverage for Lib/ctypes/wintypes.py  (0) 2014.10.12
shutil copyfileobj ()  (0) 2014.09.03
[연습]AutoPOKO ~~  (0) 2013.11.11
[펌]python thread 사용예  (0) 2013.10.16
Posted by 땡보