wireshark가 패킷을 조립후 해석한 내용을 추출하는 방법


1. wireshark에서 -> File -> Export Packet Dissections -> As Plain Text [옵션 Packet details:All expanded]


2. tshark에서 -> tshark.exe -r [input pcap file] -V 

Posted by applicationlayer
:

darkweb 리스트 자동생성

tips 2017. 11. 12. 16:34 |

https://webbreacher.com/2017/09/02/dark-web-report-torghost-eyewitness-goodness/


'tips' 카테고리의 다른 글

메신저  (0) 2016.10.08
fake mobile number  (0) 2016.09.03
vmware win7 endocing  (0) 2011.06.25
공개게시판 모음  (0) 2011.01.11
SSH 세션유지하기  (0) 2011.01.10
Posted by applicationlayer
:

http://meetup.toast.com/posts/103

'programming > lua' 카테고리의 다른 글

wireshark에서 lua사용하기  (0) 2015.04.18
Posted by applicationlayer
:

## 170327 기준


* graph search 리스트 출력

   자동스크롤,

   id 경로(xpath) : .//*[@class='_3u1 _gli _5und']


* group의 맴버 리스트 출력 (public)

   url : https://www.facebook.com/groups/[fb id]/members

   [see more]를 클릭해야 리스트 확장됨

     -> [see more] 경로접근(jquery) : $("div[data-name='GroupProfileGrid']").children("div").children("div").children("a")

   id 경로(xpath) : .//*[@class='fsl fwb fcb']



## 170502 기준


* graph search 리스트 출력

   자동스크롤,

   id 경로(xpath) :.//*[contains(@class, '_3u1') and contains(@class ,'_gli')]

Posted by applicationlayer
:

메신저

tips 2016. 10. 8. 18:28 |

http://www.itworld.co.kr/print/99250

'tips' 카테고리의 다른 글

darkweb 리스트 자동생성  (0) 2017.11.12
fake mobile number  (0) 2016.09.03
vmware win7 endocing  (0) 2011.06.25
공개게시판 모음  (0) 2011.01.11
SSH 세션유지하기  (0) 2011.01.10
Posted by applicationlayer
:

fake mobile number

tips 2016. 9. 3. 16:45 |

http://wizblogger.com/get-fake-mobile-numbers-to-bypass-verification/



'tips' 카테고리의 다른 글

darkweb 리스트 자동생성  (0) 2017.11.12
메신저  (0) 2016.10.08
vmware win7 endocing  (0) 2011.06.25
공개게시판 모음  (0) 2011.01.11
SSH 세션유지하기  (0) 2011.01.10
Posted by applicationlayer
:


Posted by applicationlayer
:

이 정책 설정을 통해 사용되는 CNG 암호화 알고리즘을 구성할 수 있습니다.


이 정책 설정을 사용하면 제공되는 암호화가 지원되는 알고리즘이면 사용됩니다.


이 정책 설정을 사용하지 않거나 구성하지 않으면 AES가 사용됩니다.


Registry HiveHKEY_CURRENT_USER
Registry Pathsoftware\policies\microsoft\office\15.0\access\security\crypto
Value Namecipheralgorithm
Value TypeREG_SZ


출처: http://winintro.com/?Category=Office2013&Policy=access15.Office.Microsoft.Policies.Windows::L_SetCNGCipherAlgorithm&Language=ko-kr



'windows' 카테고리의 다른 글

sccm관련  (0) 2013.09.05
AD환경에서 pc명 변경  (0) 2012.05.19
윈도우 정품인증  (2) 2012.03.29
윈도 스크립트 자동실행  (0) 2012.01.10
"ActiveDirectory 사용자 및 컴퓨터"-dsa.msc 실행이 안될때 win2008  (0) 2012.01.03
Posted by applicationlayer
:

http://m.blog.naver.com/tdon/70130438958


NodeXL 대박 - http://nodexl.codeplex.com/

Posted by applicationlayer
:

PEcompact MUP

rexxxxx 2015. 9. 19. 03:50 |

준비

ollydbg플러그인 OllyDump.dll

ollydbg설정 바꾸기

 - Debugging options - Exceptions - Memory access violation무시 체크


이거보고해

https://tuts4you.com/download.php?view.2866


Posted by applicationlayer
:

정리 잘되어있다

http://kit2013.tistory.com/152

 

'programming > lua' 카테고리의 다른 글

wireshark에서 lua사용하기 plugin  (0) 2017.11.03
Posted by applicationlayer
:

cwplayer

morse 2015. 1. 10. 19:02 |

모스부호 듣기 테스트

cwplayer.zip

 

Posted by applicationlayer
:

http://cafe.naver.com/12inchtablet/40821

Posted by applicationlayer
:


..


RunAs ( "administrator", "@ComputerName", "비밀번호", 0, "certmgr.exe /add "&'"'&@WorkingDir&'"'&"\XXXXXX.cer -c -s -r localMachine Root")



'programming > autoit' 카테고리의 다른 글

autohotkey & devmanview 활용  (0) 2014.12.27
Posted by applicationlayer
:

shellshock test

vulnerability 2014. 10. 1. 15:01 |

rpm -qa|grep bash


env x='() { :;}; echo vulnerable' bash -c "echo this is a test"


env x='() { (a)=>\' bash -c "echo date"; cat echo ; rm -f echo


bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"


(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"


foo='() { echo not patched; }' bash -c foo


case open

'vulnerability' 카테고리의 다른 글

보안필터 우회 종류  (0) 2013.05.22
00410041 exploit  (0) 2013.05.09
web browser bug hunting  (0) 2013.02.27
hwp & javascript  (0) 2012.10.16
GOM Player 2.1.33.5071 exploit  (0) 2011.12.09
Posted by applicationlayer
:

sccm관련

windows 2013. 9. 5. 17:06 |

http://svrstudy.tistory.com/



http://icerainbow.tistory.com/

Posted by applicationlayer
:

gmail script

programming/python 2013. 6. 20. 17:08 |

#!/usr/bin/python

import sys

import smtplib

from email.MIMEText import MIMEText


sender = 'sdfsdfsdf@gmail.com'

recipients = 'sdfsdfsdf@gmail.com'

text = sys.argv[1]

msg = MIMEText(text)

msg['Subject'] =  '[Alert'

msg['From'] = sender

msg['To'] = recipients


smtpserver = 'smtp.gmail.com'

smtpuser = 'asdfasft'         # set SMTP username here

smtppass = 'asfdasdf'   # set SMTP password here


session = smtplib.SMTP("smtp.gmail.com", 587)

session.ehlo()

session.starttls()

session.ehlo()


session.login(smtpuser, smtppass)


smtpresult = session.sendmail(sender, [recipients], msg.as_string())


if smtpresult:

  errstr = ""

  for recip in smtpresult.keys():

      errstr = """Could not delivery mail to: %s


Server said: %s

%s


%s""" % (recip, smtpresult[recip][0], smtpresult[recip][1], errstr)

  raise smtplib.SMTPException, errstr


session.close()



Posted by applicationlayer
:

division slash

http://www.fileformat.info/info/unicode/char/2215/index.htm

'vulnerability' 카테고리의 다른 글

shellshock test  (0) 2014.10.01
00410041 exploit  (0) 2013.05.09
web browser bug hunting  (0) 2013.02.27
hwp & javascript  (0) 2012.10.16
GOM Player 2.1.33.5071 exploit  (0) 2011.12.09
Posted by applicationlayer
:

immunity debugger의 pvefindaddr스크립트 실행시 에러가 나면 대소문자를 확인하자



pvefindaddr.py파일의 Log를 log로 Search를 search로 Assemble을 assemble로 변경하면 해결됨


Posted by applicationlayer
:

00410041 exploit

vulnerability 2013. 5. 9. 17:23 |

bof취약점이 있는데 unicode형식으로 데이터가 들어갈 경우 적용할 수 있는 익스플로잇 테크닉에 대해 알려준다.

http://www.manzotti.eu/tutorial-write-an-exploit-part-4-unicode

'vulnerability' 카테고리의 다른 글

shellshock test  (0) 2014.10.01
보안필터 우회 종류  (0) 2013.05.22
web browser bug hunting  (0) 2013.02.27
hwp & javascript  (0) 2012.10.16
GOM Player 2.1.33.5071 exploit  (0) 2011.12.09
Posted by applicationlayer
:

mini fuzz

fuzzing 2013. 4. 8. 10:31 |

출처:

ftp://ftp.oreilly.de/pub/examples/english_examples/9780735622142/cd_contents/MiniFuzz/LaunchExe.cpp

http://blog.naver.com/PostView.nhn?blogId=hks9999&logNo=30105498369


#include "stdafx.h"

#include "fuzz.h"

#include "log.h"


using namespace std;


// How long should the app run for us to consider the test a success (1.2secs)

const DWORD MAX_EXE_RUNTIME_MS  = 1200;


// log interesting info if we get a debug event back from the debugged app

bool ReportFailure(DEBUG_EVENT *pdbg, const char *szFilename) {

HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, pdbg->dwThreadId);

if (!hThread) {

Log("OpenThread failed");

return false;

}


string sExc;

switch(pdbg->u.Exception.ExceptionRecord.ExceptionCode) {

case EXCEPTION_ACCESS_VIOLATION : sExc = "Access Violation"; break;

case EXCEPTION_STACK_OVERFLOW: sExc = "Stack Overflow"; break;

case EXCEPTION_DATATYPE_MISALIGNMENT: sExc = "Datatype misalignment"; break; 

case EXCEPTION_ARRAY_BOUNDS_EXCEEDED : sExc = "Array Bounds Exceeded"; break;

case EXCEPTION_FLT_DIVIDE_BY_ZERO: sExc = "Float Div/0"; break;

case EXCEPTION_INT_DIVIDE_BY_ZERO: sExc = "Int Div/0"; break;

case EXCEPTION_ILLEGAL_INSTRUCTION: sExc = "Illegal Instruction"; break;

case EXCEPTION_IN_PAGE_ERROR: sExc = "In-page error"; break;

case EXCEPTION_PRIV_INSTRUCTION: sExc = "Privileged Instruction";break;

default : sExc = "Unknown"; break;

}


CONTEXT ctx;

memset(&ctx,0,sizeof CONTEXT);

ctx.ContextFlags = CONTEXT_ALL;


if (!GetThreadContext(hThread, &ctx)) {

Log("GetThreadContext failed");

return false;

}


ReportFuzzError(szFilename,sExc,ctx);


return true;

}


// spawn the exe to fuzz

bool LaunchFile(const char *szDir, const char *szExe, const char *szFilename, bool *pfDeleteTempFile) {


if (pfDeleteTempFile == NULL && szDir == NULL || szExe == NULL || szFilename == NULL) {

Log("Invalid args to LaunchFile");

return false;

}


*pfDeleteTempFile = false;

bool fError = false;


PROCESS_INFORMATION pi;

    STARTUPINFO         si;

memset(&pi,0,sizeof PROCESS_INFORMATION);

memset(&si,0,sizeof STARTUPINFO);

si.cb = sizeof STARTUPINFO;


// build up the cmd-line

string sExe(szExe);

sExe.append(" ");

sExe.append(szFilename);


BOOL fRet = CreateProcess(NULL, 

const_cast<LPSTR>(sExe.c_str()), 

NULL, NULL,

FALSE,

DEBUG_ONLY_THIS_PROCESS,

NULL, NULL,

&si, &pi);


if (!fRet) {

Log("Unable to launch process", szExe, GetLastError());

return false;

}


DWORD dwStart = GetTickCount();


// Now wait for debug events from the new process

do {

DEBUG_EVENT  dbg;

if (WaitForDebugEvent(&dbg, 200)) {


// we get copies of all loaded DLL file handles - we don't need 'em - so close 'em

if (dbg.dwDebugEventCode == LOAD_DLL_DEBUG_EVENT) {

CloseHandle(dbg.u.LoadDll.hFile);

ContinueDebugEvent(dbg.dwProcessId, dbg.dwThreadId, DBG_CONTINUE);

continue;

}


// we get a copy of the loaded exe file handle - we don't need it - so close it

if (dbg.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT) {

CloseHandle(dbg.u.CreateProcessInfo.hFile);

ContinueDebugEvent(dbg.dwProcessId, dbg.dwThreadId, DBG_CONTINUE);

continue;

}


// at this point we only care about real debug events

if (dbg.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) {

ContinueDebugEvent(dbg.dwProcessId, dbg.dwThreadId, DBG_CONTINUE);

continue;

}


// An exception occured

// CAVEAT: this code can catch *ALL* exceptions, including first-chance exceptions.

// Catching and logging a first-chance exception does *NOT* mean there is a security bug

// in your code. Don't go filing bugs on first-chance exceptions unless it's a real bug!

switch (dbg.u.Exception.ExceptionRecord.ExceptionCode) {

case EXCEPTION_ACCESS_VIOLATION : 

case EXCEPTION_STACK_OVERFLOW:

case EXCEPTION_DATATYPE_MISALIGNMENT:

case EXCEPTION_ARRAY_BOUNDS_EXCEEDED :

case EXCEPTION_FLT_DIVIDE_BY_ZERO: 

case EXCEPTION_INT_DIVIDE_BY_ZERO:

case EXCEPTION_ILLEGAL_INSTRUCTION: 

case EXCEPTION_IN_PAGE_ERROR:

case EXCEPTION_PRIV_INSTRUCTION:


// DO NOT HANDLE FIRST CHANCE EXCEPTIONS!

// If you want to handle them, then change this code to:

// if (dbg.u.Exception.dwFirstChance) {


if (!dbg.u.Exception.dwFirstChance) {

ReportFailure(&dbg, szFilename);

fError = true;

}

break;



default:

ContinueDebugEvent(dbg.dwProcessId, dbg.dwThreadId, DBG_CONTINUE);

break;

}

} else {

break;

}


} while((GetTickCount() - dwStart) < MAX_EXE_RUNTIME_MS);


DebugActiveProcessStop(pi.dwProcessId);

if (!TerminateProcess(pi.hProcess,1)) 

Log("Unable to kill process", szExe, GetLastError());


if (pi.hThread)  

CloseHandle(pi.hThread);


if (pi.hProcess) 

CloseHandle(pi.hProcess);


if (pfDeleteTempFile && !fError)

*pfDeleteTempFile = true;


return fError;

}

'fuzzing' 카테고리의 다른 글

CreateProcess시 핸들 누수 현상  (0) 2013.04.08
Fuzzing Frameworks  (0) 2011.05.09
The Art of File Format Fuzzing  (0) 2011.03.02
Posted by applicationlayer
:

'fuzzing' 카테고리의 다른 글

mini fuzz  (0) 2013.04.08
Fuzzing Frameworks  (0) 2011.05.09
The Art of File Format Fuzzing  (0) 2011.03.02
Posted by applicationlayer
:
Posted by applicationlayer
:

윈도우 패킷

dlp 2013. 3. 14. 18:53 |

http://blog.naver.com/PostView.nhn?blogId=budlpiry&logNo=100020917029&redirect=Dlog&widgetTypeCall=true

Posted by applicationlayer
:

web browser bug hunting

vulnerability 2013. 2. 27. 16:40 |

'vulnerability' 카테고리의 다른 글

보안필터 우회 종류  (0) 2013.05.22
00410041 exploit  (0) 2013.05.09
hwp & javascript  (0) 2012.10.16
GOM Player 2.1.33.5071 exploit  (0) 2011.12.09
CVE ID 받기  (0) 2011.03.31
Posted by applicationlayer
:

출처: http://packetstormsecurity.com/files/119303/androidchrome-bypass.txt


CVE Number:         CVE-2012-4908

Title:              Chrome for Android - Bypassing SOP for Local Files By Symlinks

Affected Software:  Confirmed on Chrome for Android v18.0.1025123

Credit:             Takeshi Terada

Issue Status:       v18.0.1025308 was released which fixes this vulnerability


Overview:

  Chrome for Android's Same-Origin Policy for local files (file: URI) can be

  bypassed by using symbolic links. It results in theft of Chrome's private

  files by malicious Android apps.


Details:

  Chrome for Android seems to forbid a local file to read another file,

  except for the originating file itself.


  http://code.google.com/p/chromium/issues/detail?id=37586


  However, it is possible to circumvent the restriction by a trick using

  symbolic link.


  This issue enables malicious Android apps to steal Chrome's private

  files such as Chrome's Cookie file, bookmark file, and so on.


  As an example, steps to steal Chrome's Cookie file are described below:


  1. An attacker's app creates a malicious HTML file, and makes Chrome load

     its URL with file: URI. The malicious HTML contains JavaScript code

     which, a few seconds later, tries to read the content of same URL with

     the malicious HTML itself via XMLHttpRequest.


     <body>

     <u>Wait a few seconds.</u>

     <script>

     function doitjs() {

       var xhr = new XMLHttpRequest;

       xhr.onload = function() {

         alert(xhr.responseText);

       };

       xhr.open('GET', document.URL);

       xhr.send(null);

     }

     setTimeout(doitjs, 8000);

     </script>

     </body>


  2. Before XHR fires, the attacker's app replaces the malicious

     HTML file with a symlink pointing to Chrome's Cookie file.


  3. When XHR fires, Chrome follows the symlink and provides the

     content of the Chrome's Cookie file to the malicious HTML.


  The attacker's app can also get the content of Chrome's other private

  files in a similar manner.


Proof of Concept:

  HTML/JavaScript is shown above. At present I do not have plans to disclose

  PoC of malicious Android app.


Timeline:

  2012/08/19  Reported to Google security team

  2012/08/25  Re-reported to Chrome security team

  2012/09/12  Vender announced v18.0.1025308

  2013/01/07  Disclosure of this advisory


Recommendation:

  Upgrade to the latest version.


Reference:

  http://googlechromereleases.blogspot.jp/2012/09/chrome-for-android-update.html

  https://code.google.com/p/chromium/issues/detail?id=144866

Posted by applicationlayer
:

브라우저별 SOP(same origin policy)허용범위


www.abc.net 에 접근 한다고 가정할 경우


ie.

가능 www.abc.net

가능 abc.net


chrome

가능 www.abc.net

가능 abc.net

가능 net


ff

가능 www.abc.net

가능 abc.net




'vulnerability > sop' 카테고리의 다른 글

androind chrome sop bypass  (0) 2013.02.18
Google Chrome 4.1.249.1059 Cross Origin Bypass in Google URL  (0) 2010.05.24
Posted by applicationlayer
:

Snort + DAQ + PF_RING

snort 2013. 1. 16. 18:19 |

성능이 얼마나 올라갈까

##############################################

======> 트래픽이 높아지니 kernel에러 또는 로그없이 스노트가 멈추는 현상이 발생해서 2.9.4.0으로 교체함. 아직까진 문제 없음. 

2.9.4로 설치시 daq만 2.0으로 재설치하면 나머지 과정은 같다. (pf_ring관련모듈 재컴파일 필요)

최신버전에서는 mysql output을 지원하지 않는다. db저장시 snort-barnyard-mysql 방식을 이용할것

##############################################




환경: CentOS 5.8 / Snort 2.9.2 / 


######기존snort삭제########################

make uninstall

###########################################

파일 다운로드 및 압축해제

# tar xvzf libpcap-1.2.1.tar.gz

# tar xvzf daq-0.6.2.tar.gz

# tar xvzf libdnet-1.12.tar.gz

# tar xvzf pcre-8.30.tar.gz

# tar xvzf snort-2.9.2.2.tar.gz


# cd libpcap-1.2.1

# ./configure

# make

# make install

# cd /usr/lib64/

# rm libpcap.so

# rm libpcap.so.0

# rm libpcap.so.0.9

# ln -s /usr/local/lib/libpcap.so.1.2.1 /usr/lib64/libpcap.so.1.2.1

# ln -s /usr/lib64/libpcap.so.1.2.1 /usr/lib64/libpcap.so.1

# ln -s /usr/lib64/libpcap.so.1 /usr/lib64/libpcap.so


# cd daq-0.6.2

# ./configure

# make

# make install


# cd pcre-8.30

# ./configure

# make

# make install


# cd libdnet-1.12

# ./configure

# make

# make install


# cd snort-2.9.2.2

# ./configure -with-mysql-libraries=/usr/lib64/mysql/ -enable-dynamicplugin -enable-zlib -enable-ipv6  -enable-sourcefire

# make

# make install


중간확인해보기

# snort -V


   ,,_     -*> Snort! <*-

  o"  )~   Version 2.9.2.2 IPv6 GRE (Build 121)

   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team

           Copyright (C) 1998-2012 Sourcefire, Inc., et al.

           Using libpcap version 1.2.1

           Using PCRE version: 8.30 2012-02-04

           Using ZLIB version: 1.2.3



# groupadd snort

# useradd -g snort snort -s /sbin/nologin

# mkdir /etc/snort

# mkdir /etc/snort/rules

# mkdir /etc/snort/so_rules

# mkdir /etc/snort/preproc_rules

# mkdir /var/log/snort

# chown snort:snort /var/log/snort

# mkdir /usr/local/lib/snort_dynamicrules

# cd etc/

# cp * /etc/snort/


####룰파일 다운로드/적용(snort공홈)###########################


# tar xvzf snortrules-snapshot-2921.tar.gz

# cd rules/

# cp * /etc/snort/rules

# cp ../so_rules/precompiled/Centos-5-4/x86-64/2.9.2.1/* /etc/snort/so_rules

# cp ../preproc_rules/* /etc/snort/preproc_rules

***/etc/snort/snort.conf설정은 알아서 바꾸시고....


##PF_RING설치##############################

필요한 프로그램 다운로드 및 설치 (./configure & make & make install)

#tar zxvf autoconf-2.69.tar.gz

#tar zxvf automake-1.9.tar.gz

#tar zxvf libtool-2.4.tar.gz


PF_RING다운로드 / 압축해제

cd PF_RING/kernel

make

make install

insmod ./pf_ring.ko

***커널에 모듈이 올라왔는지 확인

***lsmod |grep pf_ring


cd lib

./configure

make

make install

***/usr/local/lib/libpfring.so파일이 생겼는지 확인


#cd snort/pfring-daq-module

#autoreconf -ivf

#./configure

#make

#make install



##Snort동작 확인#########################################

snort --daq-dir=/usr/local/lib/daq --daq pfring -i eth9 -c /etc/snort/snort.conf -T


참고

http://kezhong.wordpress.com/2012/04/07/install-snort-2-9-2-2-on-centos5-8x86_64/

'snort' 카테고리의 다른 글

이벤트별 DB분류 저장  (0) 2013.01.12
Managing Snort Alerts  (0) 2013.01.11
Snort On Multiple NICs  (0) 2012.11.09
snort 퍼포먼스 모니터링  (0) 2012.09.11
snort-sms연동(bash)  (0) 2012.04.19
Posted by applicationlayer
:

이벤트별 DB분류 저장

snort 2013. 1. 12. 22:16 |
이벤트타입(alert,log)별로 나누는건 가능한듯 

alert는 snortDB, log는 snort2DB에 저장하기

->alert에 대한 output은 snort.conf설정에, log에 대한 output은 룰파일 내부 ruletype으로 설정한다.

※둘다 snort.conf에 설정할 경우 alert이벤트가 두DB에 중복 저장됨



ruletype redalert {

        type log

        output database: log, mysql, user=snort password=ahslxj1234 dbname=snort2 host=localhost

}

redalert tcp any any -> any any (msg:"test";content:"test";sid:90001;)


'snort' 카테고리의 다른 글

Snort + DAQ + PF_RING  (0) 2013.01.16
Managing Snort Alerts  (0) 2013.01.11
Snort On Multiple NICs  (0) 2012.11.09
snort 퍼포먼스 모니터링  (0) 2012.09.11
snort-sms연동(bash)  (0) 2012.04.19
Posted by applicationlayer
:

Managing Snort Alerts

snort 2013. 1. 11. 15:39 |

snort이벤트를 다루는 방법


03~LogParser.pdf


'snort' 카테고리의 다른 글

Snort + DAQ + PF_RING  (0) 2013.01.16
이벤트별 DB분류 저장  (0) 2013.01.12
Snort On Multiple NICs  (0) 2012.11.09
snort 퍼포먼스 모니터링  (0) 2012.09.11
snort-sms연동(bash)  (0) 2012.04.19
Posted by applicationlayer
: