<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7312640465707645146</id><updated>2024-09-13T10:22:42.828+07:00</updated><category term="Reverse Engineering"/><category term="Forensics"/><category term="General"/><category term="HOWTO"/><category term="WebAppSec"/><title type='text'>Chirashi Security</title><subtitle type='html'>Chirashi: ちらし “scattered/to scatter”; this is a blog with scattered thoughts on security.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sheran</name><uri>http://www.blogger.com/profile/07584543822885653695</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-4457240215960403510</id><published>2009-11-02T16:29:00.002+07:00</published><updated>2009-11-02T16:30:00.787+07:00</updated><title type='text'>You will be redirected to the new blog</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Please wait, you&#39;re being redirected to the new blog...&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/4457240215960403510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/4457240215960403510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/4457240215960403510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/4457240215960403510'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2009/11/you-will-be-redirected-to-new-blog.html' title='You will be redirected to the new blog'/><author><name>Sheran</name><uri>http://www.blogger.com/profile/07584543822885653695</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-632349027570393310</id><published>2009-07-19T01:24:00.002+07:00</published><updated>2009-07-19T01:25:37.143+07:00</updated><title type='text'>No more updates here</title><content type='html'>Please check &lt;a href=&quot;http://chirashi.zensay.com/&quot;&gt;http://chirashi.zensay.com/&lt;/a&gt; for continued updates to this blog.  I have moved sites.  Thanks.</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/632349027570393310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/632349027570393310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/632349027570393310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/632349027570393310'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2009/07/no-more-updates-here.html' title='No more updates here'/><author><name>Sheran</name><uri>http://www.blogger.com/profile/07584543822885653695</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-1124520191118766948</id><published>2009-05-31T15:38:00.003+07:00</published><updated>2009-05-31T15:39:14.424+07:00</updated><title type='text'>Sending messages to the Apache Error.log file when using Django</title><content type='html'>&lt;p&gt;I spent a considerable amount of time reading documentation that told me how to send errors to the Apache log filewhen you use mod_wsgi. I read documentation on how to integrate mod_wsgi with Apache and Django.  All of this was fine, but when I was trying to get it to work with my Django 1.0.2 installation and Apache2 running mod_wsgi, I was constantly greeted by lots of errors.  The documents online didn&#39;t help at all.&lt;/p&gt; &lt;p&gt;Finally, after looking into the django.core.handlers.wsgi module, I figured out how to send errors to the wsgi.errors setting and subsequently send errors to your Apache2 Error.log file.&lt;/p&gt; &lt;p&gt;I started off with my views.py as follows:&lt;/p&gt; &lt;pre line=&quot;1&quot; lang=&quot;PYTHON&quot;&gt;from django.http import HttpResponse&lt;br /&gt;from django.shortcuts import render_to_response, get_object_or_404&lt;br /&gt;from myapp.models import F&lt;br /&gt;&lt;br /&gt;def index(request):&lt;br /&gt;   c = {}&lt;br /&gt;   return render_to_response(&#39;myapp/index.html&#39;,c)&lt;br /&gt;&lt;br /&gt;def detail(request, name):&lt;br /&gt;   n = F.objects.get(name=name)&lt;br /&gt;   c = {&#39;name&#39;: n.fof}&lt;br /&gt;   return render_to_response(&#39;myapp/detail.html&#39;,c)&lt;/pre&gt; &lt;p&gt;If I needed to write to the Error.log file, I would have to change the code thusly:&lt;/p&gt; &lt;pre line=&quot;1&quot; lang=&quot;PYTHON&quot;&gt;from django.http import HttpResponse&lt;br /&gt;from django.shortcuts import render_to_response, get_object_or_404&lt;br /&gt;from myapp.models import F&lt;br /&gt;&lt;br /&gt;def index(request):&lt;br /&gt;   c = {}&lt;br /&gt;   print &gt;&gt; request.environ[&#39;wsgi.errors&#39;],&quot;Teh Errorist!&quot;&lt;br /&gt;   return render_to_response(&#39;myapp/index.html&#39;,c)&lt;br /&gt;&lt;br /&gt;def detail(request, name):&lt;br /&gt;   n = F.objects.get(name=name)&lt;br /&gt;   c = {&#39;name&#39;: n.fof}&lt;br /&gt;   return render_to_response(&#39;myapp/detail.html&#39;,c)&lt;/pre&gt; &lt;p&gt;The change is in line 7&lt;/p&gt; &lt;p&gt;I felt really stupid, because the solution was so straightforward.  I felt even more stupid that I couldn&#39;t find any documentation out there.  Either way, I&#39;m pleased that my app works, and in case someone else out there is searching for how to achieve this, then the above is how to do it.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/1124520191118766948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/1124520191118766948' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/1124520191118766948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/1124520191118766948'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2009/05/sending-messages-to-apache-errorlog.html' title='Sending messages to the Apache Error.log file when using Django'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-6769602247381371277</id><published>2009-05-08T22:27:00.010+07:00</published><updated>2009-05-09T22:39:10.735+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="WebAppSec"/><title type='text'>Re-login plugin for Burp Suite</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;One of the first things I do when I begin a web application security assessment is figure out how the login sequence works.  Then as I begin to annoy the application, I figure out what makes the application say, &quot;Enough!&quot; and kick me out by invalidating my session.  With this, I can automate the process and save a huge amount of time logging into the application manually when my session is made invalid.&lt;br /&gt;&lt;br /&gt;I&#39;m a big fan of &lt;/span&gt;&lt;a href=&quot;http://portswigger.net/suite&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Burp Suite&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;.  Burp Suite is a set of tools that I believe every web application pen-tester should find indispensable.  Developed by Dafydd Stuttard a.k.a. Port Swigger, it is available in both Free and Professional (read paid) versions.  Its a great set of tools and I use it&#39;s &lt;/span&gt;&lt;a href=&quot;http://portswigger.net/suite/help.html#extensibility&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;extensibility&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; to achieve the automated login process.  Dafydd has also co-authored the book &lt;/span&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0470170778?ie=UTF8&amp;amp;tag=portswinet-20&amp;amp;link_code=as3&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=0470170778&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;The Web Application Hacker&#39;s Handbook&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;.  No, I don&#39;t personally know Dafydd, and no, he&#39;s not paying me to say these things (although I would never dare to send back a free copy of the Pro version he would send me ;) ), but I use the tools and I think they&#39;re quite awesome.&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;I recently pen-tested a banking application that was being launched by a large bank and dusted off my re-login plugin.  Given that the bank used the F5 Big IP appliance with the application security module and the fact that it employed a ticketing system, I had to make extensive changes to my once humble re-login plugin.  So I did.  In the spirit of giving back, I thought someone else might find the plugin useful or can even build off my one (if you do, please do share the improved version) so I&#39;ll  post my research and final plugin here.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Because of the pain in the ass Big IP, I had to craft my re-login plugin as follows:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Record the error page of the Big IP and find a unique string to identify the page&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Record the POST request for the login page &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Write the plugin to detect if this string is in the response&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;If it is, then make an HTTP GET request to the start page.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Grab the cookies from the GET request&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Replace the cookies from the POST request with the ones from the GET request&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Make the HTTP POST request&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Grab the response and send it back to the browser.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Now when I send that incredibly long string in the &quot;Amount&quot; field or send a whole load of XSS in the &quot;Description&quot; field, I am no longer greeted by the Big IP error page.  Instead, my plugin takes over, seamlessly logs me back in and brings me to the landing page.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Here is the source code:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:-webkit-monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:Georgia;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;import java.util.regex.Matcher;&lt;br /&gt;import java.util.regex.Pattern;&lt;br /&gt;import burp.IBurpExtender;&lt;br /&gt;import burp.IBurpExtenderCallbacks;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class BurpExtender implements IBurpExtender {&lt;br /&gt;&lt;br /&gt;public burp.IBurpExtenderCallbacks callBacks;&lt;br /&gt;&lt;br /&gt;public void applicationClosing() {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {&lt;br /&gt; callBacks = callbacks;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setCommandLineArgs(String[] cla) {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public byte[] processProxyMessage(&lt;br /&gt;  int messageReference,&lt;br /&gt;  boolean messageIsRequest,&lt;br /&gt;  String remoteHost,&lt;br /&gt;  int remotePort,&lt;br /&gt;  boolean serviceIsHttps,&lt;br /&gt;  String httpMethod,&lt;br /&gt;  String url,&lt;br /&gt;  String resourceType,&lt;br /&gt;  String statusCode,&lt;br /&gt;  String responseContentType,&lt;br /&gt;  byte[] message,&lt;br /&gt;  int[] action)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; byte[] firstRequest;&lt;br /&gt; byte[] nextRequest;&lt;br /&gt; String initialCookies = &quot;&quot;;&lt;br /&gt;&lt;br /&gt; if(!messageIsRequest){&lt;br /&gt;  try{&lt;br /&gt;   if(isBigIPError(message)){&lt;br /&gt;    callBacks.issueAlert(&quot;Attempting to re-login...&quot;);&lt;br /&gt;    firstRequest = new String(&quot;[Enter GET Request Here, one string seperate with &#39;\r\n&#39;]&quot;).getBytes();&lt;br /&gt;    nextRequest = new String(&quot;[Enter POST Request Here, one string seperate with &#39;\r\n&#39;&quot;).getBytes();&lt;br /&gt;    byte[] firstResp = callBacks.makeHttpRequest(remoteHost, remotePort, serviceIsHttps, firstRequest);&lt;br /&gt;    initialCookies = grabCookies(firstResp);&lt;br /&gt;    byte[] interimReq = buildRequest(initialCookies,nextRequest);&lt;br /&gt;    message = callBacks.makeHttpRequest(remoteHost, remotePort, serviceIsHttps, interimReq);&lt;br /&gt;   }&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; return message;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private String grabCookies(byte[] getRequest){&lt;br /&gt; String getReq = new String(getRequest); &lt;br /&gt; String regEx = &quot;Set-Cookie:\\s(.*?);&quot;;&lt;br /&gt; Pattern pattern = Pattern.compile(regEx, Pattern.DOTALL | Pattern.MULTILINE);&lt;br /&gt; Matcher matcher = pattern.matcher(getReq);&lt;br /&gt; StringBuilder cookies = new StringBuilder();&lt;br /&gt; cookies.append(&quot;Cookie: &quot;);&lt;br /&gt; while(matcher.find()){&lt;br /&gt;  cookies.append(matcher.group(1)+&quot;; &quot;);&lt;br /&gt; }&lt;br /&gt; cookies.append(&quot;\r\n&quot;);&lt;br /&gt; return cookies.toString();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private byte[] buildRequest(String cookies, byte[] postRequest){&lt;br /&gt; String[] carvedPost = {};&lt;br /&gt; String postReq = new String(postRequest);&lt;br /&gt; carvedPost = postReq.split(&quot;\r\n\r\n&quot;);&lt;br /&gt; postReq = carvedPost[0]+&quot;\r\nContent-Length: &quot;+carvedPost[1].length()+&quot;\r\n\r\n&quot;+carvedPost[1];&lt;br /&gt; StringBuffer finalReq = new StringBuffer();&lt;br /&gt; String regEx = &quot;Cookie:\\s(.*?)\r\n&quot;;&lt;br /&gt; Pattern pattern = Pattern.compile(regEx, Pattern.DOTALL | Pattern.MULTILINE);&lt;br /&gt; Matcher matcher = pattern.matcher(postReq);&lt;br /&gt; while(matcher.find()){  &lt;br /&gt;  matcher.group();&lt;br /&gt;  matcher.appendReplacement(finalReq,cookies.toString());&lt;br /&gt; }&lt;br /&gt; matcher.appendTail(finalReq);   &lt;br /&gt; return finalReq.toString().getBytes();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private boolean isBigIPError(byte[] msg){&lt;br /&gt; String message = new String(msg);&lt;br /&gt; boolean result =false;&lt;br /&gt; try{&lt;br /&gt;  String regEx = &quot;[Enter your RegEx for the Error Page here]&quot;;&lt;br /&gt;  Pattern pattern = Pattern.compile(regEx,Pattern.DOTALL|Pattern.MULTILINE);&lt;br /&gt;  Matcher matcher = pattern.matcher(message);&lt;br /&gt;  if(matcher.matches()){&lt;br /&gt;   callBacks.issueAlert(&quot;Received error from F5 Big-IP!&quot;);&lt;br /&gt;   result = true;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt; } catch (Exception e) {&lt;br /&gt;  e.printStackTrace();&lt;br /&gt; }&lt;br /&gt; return result;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;To get this to work in Burp, I will provide you with instructions directly from PortSwigger:&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;Before you proceed, make sure to change the GET, POST and RegEx to match your own scenario.  Just place them into the areas surrounded by square brackets.  Remove the square brackets after that.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;---------------------------------SNIP-------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;If you want to play with this example yourself, you can download the &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#000000;&quot;&gt;&lt;a href=&quot;http://www.zensay.com/files/BurpExtender.java&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;source code&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;. The steps to compile and run the plugin are as follows:&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;If you don&#39;t already have it, &lt;/span&gt;&lt;a href=&quot;http://java.sun.com/javase/downloads/index.jsp&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;download&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; and install the Java Development Kit (JDK) from Sun.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Create a directory to work in, and cd into it from the command line.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Copy the plugin source file (BurpExtender.java) into your working directory.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Create a subdirectory called &quot;burp&quot;, and copy the&lt;/span&gt;&lt;a href=&quot;http://portswigger.net/misc/IBurpExtenderCallbacks.java&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;IBurpExtenderCallbacks.java&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; file into this directory. You will need this file in the correct relative path, because the plugin code makes use of the IBurpExtenderCallbacks interface.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;In your working directory, compile the BurpExtender.java source file into a .class file using javac, the Java compiler. The exact command will depend on the location of your JDK - for example, on Windows, you might type: &lt;/span&gt;&lt;span style=&quot; ;font-family:&#39;courier new&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&quot;\Program Files\Java\jdk1.6.0_04\bin\javac.exe&quot; BurpExtender.java&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Confirm that the file BurpExtender.class has appeared in your working directory.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Build a Java archive (JAR) file containing your .class file. Depending again on your JDK location, you might type:&lt;/span&gt;&lt;span style=&quot; ;font-family:&#39;courier new&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&quot;\Program Files\Java\jdk1.6.0_04\bin\jar.exe&quot; -cf burpextender.jar BurpExtender.class&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Confirm that the file burpextender.jar has appeared in your working directory.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Copy your normal Burp JAR file into your working directory.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Using the actual name of your Burp JAR file, start Burp using the command: &lt;/span&gt;&lt;span style=&quot; ;font-family:&#39;courier new&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;java -Xmx512m -classpath burpextender.jar;burp.jar burp.StartBurp&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;If everything works, Burp should launch with a number of entries in the alerts tab, confirming which IBurpExtender methods were successfully loaded from your plugin (in this case, processProxyMessage and registerExtenderCallbacks):&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;---------------------------------SNIP-------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt; I&#39;ll do my best to answer them.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;That should be it for now.  Go forth and Haxx0r!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;Chopstick&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:11px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/6769602247381371277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/6769602247381371277' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6769602247381371277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6769602247381371277'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2009/05/re-login-plugin-for-burp-suite.html' title='Re-login plugin for Burp Suite'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-2485697051284365721</id><published>2007-08-04T03:12:00.000+07:00</published><updated>2007-08-04T03:14:17.607+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reverse Engineering"/><title type='text'>Dissecting the GoDaddy email notifier - Part 4</title><content type='html'>Ok, this is hopefully the last part of my Dissecting series for the email notifier.  I last left you with the fact that I had reverse engineered the encryption and decryption algorithm.  I simply poked around the calls to the registry key write function calls and found the encryption and decryption routines.  I will list them here:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;004046D7  /$  55            PUSH EBP               ;  Main Encrypter&lt;br /&gt;004046D8  |.  8BEC          MOV EBP,ESP&lt;br /&gt;004046DA  |.  51            PUSH ECX&lt;br /&gt;004046DB  |.  51            PUSH ECX&lt;br /&gt;004046DC  |.  837E 14 00    CMP DWORD PTR DS:[ESI+14],0&lt;br /&gt;004046E0  |.  8BC6          MOV EAX,ESI&lt;br /&gt;004046E2  |.  0F84 CC000000 JE 004047B4&lt;br /&gt;004046E8  |.  53            PUSH EBX&lt;br /&gt;004046E9  |.  8B5E 14       MOV EBX,DWORD PTR DS:[ESI+14]&lt;br /&gt;004046EC  |.  895D FC       MOV DWORD PTR SS:[EBP-4],EBX&lt;br /&gt;004046EF  |.  57            PUSH EDI&lt;br /&gt;004046F0  |.  4B            DEC EBX&lt;br /&gt;004046F1  |.  8BFB          MOV EDI,EBX&lt;br /&gt;004046F3  |.  E8 A0010000   CALL 00404898&lt;br /&gt;004046F8  |.  0FB608        MOVZX ECX,BYTE PTR DS:[EAX]&lt;br /&gt;004046FB  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]&lt;br /&gt;004046FE  |.  6A 05         PUSH 5&lt;br /&gt;00404700  |.  33D2          XOR EDX,EDX&lt;br /&gt;00404702  |.  5F            POP EDI&lt;br /&gt;00404703  |.  F7F7          DIV EDI&lt;br /&gt;00404705  |.  8BFB          MOV EDI,EBX&lt;br /&gt;00404707  |.  C1E2 08       SHL EDX,8&lt;br /&gt;0040470A  |.  66:0FB68411 4&gt;MOVZX AX,BYTE PTR DS:[EAX+ECX+427F48]&lt;br /&gt;00404713  |.  0FB7C0        MOVZX EAX,AX&lt;br /&gt;00404716  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX&lt;br /&gt;00404719  |.  8BC6          MOV EAX,ESI&lt;br /&gt;0040471B  |.  E8 78010000   CALL 00404898&lt;br /&gt;00404720  |.  66:8B00       MOV AX,WORD PTR DS:[EAX]&lt;br /&gt;00404723  |.  66:25 00FF    AND AX,0FF00&lt;br /&gt;00404727  |.  66:0B45 FC    OR AX,WORD PTR SS:[EBP-4]&lt;br /&gt;0040472B  |.  0FB7C0        MOVZX EAX,AX&lt;br /&gt;0040472E  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX&lt;br /&gt;00404731  |.  8BC6          MOV EAX,ESI&lt;br /&gt;00404733  |.  E8 60010000   CALL 00404898&lt;br /&gt;00404738  |.  66:8B4D FC    MOV CX,WORD PTR SS:[EBP-4]&lt;br /&gt;0040473C  |.  66:8908       MOV WORD PTR DS:[EAX],CX&lt;br /&gt;0040473F  |.  8BC6          MOV EAX,ESI&lt;br /&gt;00404741  |.  E8 52010000   CALL 00404898&lt;br /&gt;00404746  |.  0FB700        MOVZX EAX,WORD PTR DS:[EAX]&lt;br /&gt;00404749  |.  6A 05         PUSH 5&lt;br /&gt;0040474B  |.  99            CDQ&lt;br /&gt;0040474C  |.  59            POP ECX&lt;br /&gt;0040474D  |.  F7F9          IDIV ECX&lt;br /&gt;0040474F  |.  33FF          XOR EDI,EDI&lt;br /&gt;00404751  |.  85DB          TEST EBX,EBX&lt;br /&gt;00404753  |.  8955 FC       MOV DWORD PTR SS:[EBP-4],EDX&lt;br /&gt;00404756  |.  76 58         JBE SHORT 004047B0&lt;br /&gt;00404758  |&gt;  8BC6          /MOV EAX,ESI&lt;br /&gt;0040475A  |.  E8 39010000   |CALL 00404898&lt;br /&gt;0040475F  |.  0FB600        |MOVZX EAX,BYTE PTR DS:[EAX]&lt;br /&gt;00404762  |.  8B4D FC       |MOV ECX,DWORD PTR SS:[EBP-4]&lt;br /&gt;00404765  |.  C1E1 08       |SHL ECX,8&lt;br /&gt;00404768  |.  66:0FB68408 4&gt;|MOVZX AX,BYTE PTR DS:[EAX+ECX427F48]&lt;br /&gt;00404771  |.  0FB7C0        |MOVZX EAX,AX&lt;br /&gt;00404774  |.  8945 F8       |MOV DWORD PTR SS:[EBP-8],EAX&lt;br /&gt;00404777  |.  8BC6          |MOV EAX,ESI&lt;br /&gt;00404779  |.  E8 1A010000   |CALL 00404898&lt;br /&gt;0040477E  |.  66:8B00       |MOV AX,WORD PTR DS:[EAX]&lt;br /&gt;00404781  |.  66:25 00FF    |AND AX,0FF00&lt;br /&gt;00404785  |.  66:0B45 F8    |OR AX,WORD PTR SS:[EBP-8]&lt;br /&gt;00404789  |.  0FB7C0        |MOVZX EAX,AX&lt;br /&gt;0040478C  |.  8945 F8       |MOV DWORD PTR SS:[EBP-8],EAX&lt;br /&gt;0040478F  |.  8BC6          |MOV EAX,ESI&lt;br /&gt;00404791  |.  E8 02010000   |CALL 00404898&lt;br /&gt;00404796  |.  66:8B4D F8    |MOV CX,WORD PTR SS:[EBP-8]&lt;br /&gt;0040479A  |.  66:8908       |MOV WORD PTR DS:[EAX],CX&lt;br /&gt;0040479D  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]&lt;br /&gt;004047A0  |.  47            |INC EDI&lt;br /&gt;004047A1  |.  6A 05         |PUSH 5&lt;br /&gt;004047A3  |.  40            |INC EAX&lt;br /&gt;004047A4  |.  33D2          |XOR EDX,EDX&lt;br /&gt;004047A6  |.  59            |POP ECX&lt;br /&gt;004047A7  |.  F7F1          |DIV ECX&lt;br /&gt;004047A9  |.  3BFB          |CMP EDI,EBX&lt;br /&gt;004047AB  |.  8955 FC       |MOV DWORD PTR SS:[EBP-4],EDX&lt;br /&gt;004047AE  |.^ 72 A8         \JB SHORT 00404758&lt;br /&gt;004047B0  |&gt;  5F            POP EDI&lt;br /&gt;004047B1  |.  8BC6          MOV EAX,ESI&lt;br /&gt;004047B3  |.  5B            POP EBX&lt;br /&gt;004047B4  |&gt;  C9            LEAVE&lt;br /&gt;004047B5  \.  C3            RET&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The code above is for the Encrypter and the code below is the Decrypter:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;004047B6  /$  55            PUSH EBP                 ;  Main Decrypter&lt;br /&gt;004047B7  |.  8BEC          MOV EBP,ESP&lt;br /&gt;004047B9  |.  51            PUSH ECX&lt;br /&gt;004047BA  |.  51            PUSH ECX&lt;br /&gt;004047BB  |.  53            PUSH EBX&lt;br /&gt;004047BC  |.  8B5E 14       MOV EBX,DWORD PTR DS:[ESI+14]&lt;br /&gt;004047BF  |.  85DB          TEST EBX,EBX&lt;br /&gt;004047C1  |.  8BC6          MOV EAX,ESI&lt;br /&gt;004047C3  |.  0F84 CC000000 JE 00404895&lt;br /&gt;004047C9  |.  57            PUSH EDI&lt;br /&gt;004047CA  |.  4B            DEC EBX&lt;br /&gt;004047CB  |.  8BFB          MOV EDI,EBX&lt;br /&gt;004047CD  |.  E8 C6000000   CALL 00404898&lt;br /&gt;004047D2  |.  0FB700        MOVZX EAX,WORD PTR DS:[EAX]&lt;br /&gt;004047D5  |.  6A 05         PUSH 5&lt;br /&gt;004047D7  |.  99            CDQ&lt;br /&gt;004047D8  |.  59            POP ECX&lt;br /&gt;004047D9  |.  F7F9          IDIV ECX&lt;br /&gt;004047DB  |.  33FF          XOR EDI,EDI&lt;br /&gt;004047DD  |.  85DB          TEST EBX,EBX&lt;br /&gt;004047DF  |.  8955 FC       MOV DWORD PTR SS:[EBP-4],EDX&lt;br /&gt;004047E2  |.  76 58         JBE SHORT 0040483C&lt;br /&gt;004047E4  |&gt;  8BC6          /MOV EAX,ESI&lt;br /&gt;004047E6  |.  E8 AD000000   |CALL 00404898&lt;br /&gt;004047EB  |.  0FB600        |MOVZX EAX,BYTE PTR DS:[EAX]&lt;br /&gt;004047EE  |.  8B4D FC       |MOV ECX,DWORD PTR SS:[EBP-4]&lt;br /&gt;004047F1  |.  C1E1 08       |SHL ECX,8&lt;br /&gt;004047F4  |.  66:0FB68408 4&gt;|MOVZX AX,BYTE PTR DS:[EAX+ECX+428448]&lt;br /&gt;004047FD  |.  0FB7C0        |MOVZX EAX,AX&lt;br /&gt;00404800  |.  8945 F8       |MOV DWORD PTR SS:[EBP-8],EAX&lt;br /&gt;00404803  |.  8BC6          |MOV EAX,ESI&lt;br /&gt;00404805  |.  E8 8E000000   |CALL 00404898&lt;br /&gt;0040480A  |.  66:8B00       |MOV AX,WORD PTR DS:[EAX]&lt;br /&gt;0040480D  |.  66:25 00FF    |AND AX,0FF00&lt;br /&gt;00404811  |.  66:0B45 F8    |OR AX,WORD PTR SS:[EBP-8]&lt;br /&gt;00404815  |.  0FB7C0        |MOVZX EAX,AX&lt;br /&gt;00404818  |.  8945 F8       |MOV DWORD PTR SS:[EBP-8],EAX&lt;br /&gt;0040481B  |.  8BC6          |MOV EAX,ESI&lt;br /&gt;0040481D  |.  E8 76000000   |CALL 00404898&lt;br /&gt;00404822  |.  66:8B4D F8    |MOV CX,WORD PTR SS:[EBP-8]&lt;br /&gt;00404826  |.  66:8908       |MOV WORD PTR DS:[EAX],CX&lt;br /&gt;00404829  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]&lt;br /&gt;0040482C  |.  47            |INC EDI&lt;br /&gt;0040482D  |.  6A 05         |PUSH 5&lt;br /&gt;0040482F  |.  40            |INC EAX&lt;br /&gt;00404830  |.  33D2          |XOR EDX,EDX&lt;br /&gt;00404832  |.  59            |POP ECX&lt;br /&gt;00404833  |.  F7F1          |DIV ECX&lt;br /&gt;00404835  |.  3BFB          |CMP EDI,EBX&lt;br /&gt;00404837  |.  8955 FC       |MOV DWORD PTR SS:[EBP-4],EDX&lt;br /&gt;0040483A  |.^ 72 A8         \JB SHORT 004047E4&lt;br /&gt;0040483C  |&gt;  8B46 14       MOV EAX,DWORD PTR DS:[ESI+14]&lt;br /&gt;0040483F  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX&lt;br /&gt;00404842  |.  8BFB          MOV EDI,EBX&lt;br /&gt;00404844  |.  8BC6          MOV EAX,ESI&lt;br /&gt;00404846  |.  E8 4D000000   CALL 00404898&lt;br /&gt;0040484B  |.  0FB608        MOVZX ECX,BYTE PTR DS:[EAX]&lt;br /&gt;0040484E  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]&lt;br /&gt;00404851  |.  6A 05         PUSH 5&lt;br /&gt;00404853  |.  33D2          XOR EDX,EDX&lt;br /&gt;00404855  |.  5F            POP EDI&lt;br /&gt;00404856  |.  F7F7          DIV EDI&lt;br /&gt;00404858  |.  8BFB          MOV EDI,EBX&lt;br /&gt;0040485A  |.  C1E2 08       SHL EDX,8&lt;br /&gt;0040485D  |.  66:0FB68411 4&gt;MOVZX AX,BYTE PTR DS:[ECX+EDX+428448]&lt;br /&gt;00404866  |.  0FB7C0        MOVZX EAX,AX&lt;br /&gt;00404869  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX&lt;br /&gt;0040486C  |.  8BC6          MOV EAX,ESI&lt;br /&gt;0040486E  |.  E8 25000000   CALL 00404898&lt;br /&gt;00404873  |.  66:8B00       MOV AX,WORD PTR DS:[EAX]&lt;br /&gt;00404876  |.  66:25 00FF    AND AX,0FF00&lt;br /&gt;0040487A  |.  66:0B45 F8    OR AX,WORD PTR SS:[EBP-8]&lt;br /&gt;0040487E  |.  0FB7C0        MOVZX EAX,AX&lt;br /&gt;00404881  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX&lt;br /&gt;00404884  |.  8BC6          MOV EAX,ESI&lt;br /&gt;00404886  |.  E8 0D000000   CALL 00404898&lt;br /&gt;0040488B  |.  66:8B4D F8    MOV CX,WORD PTR SS:[EBP-8]&lt;br /&gt;0040488F  |.  66:8908       MOV WORD PTR DS:[EAX],CX&lt;br /&gt;00404892  |.  8BC6          MOV EAX,ESI&lt;br /&gt;00404894  |.  5F            POP EDI&lt;br /&gt;00404895  |&gt;  5B            POP EBX&lt;br /&gt;00404896  |.  C9            LEAVE&lt;br /&gt;00404897  \.  C3            RET&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I will leave you with the python source code for the encryption and decryption routines so that you can look at the algorithm and get a feel for what was going on.  You will need the static data which can be found in the .rdata section.  This is the cipher text that is looked up during the encryption and decryption phase.  I have included it in the tool as a separate file.&lt;br /&gt;I may decide to start developing a Linux variant for checking my GoDaddy mail, but don’t hold your breath.  Mail me any questions you may have.  If you’re interested.&lt;br /&gt;&lt;br /&gt;The tool can be found &lt;a href=&quot;http://chirashi.zensay.com/wp-content/uploads/2007/08/wben.zip&quot;&gt;here.&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/2485697051284365721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/2485697051284365721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/2485697051284365721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/2485697051284365721'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2007/08/dissecting-godaddy-email-notifier-part.html' title='Dissecting the GoDaddy email notifier - Part 4'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-6834507003121041200</id><published>2007-07-29T21:52:00.000+07:00</published><updated>2007-08-04T02:23:59.189+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reverse Engineering"/><title type='text'>Dissecting the GoDaddy email notifier - Part 3</title><content type='html'>It’s been sometime since I made a post and that kinda sucks. I’ve been a bit swamped with work and have not had any real time to do my own stuff. Presently out in Cairo. Pyramids are phun.&lt;br /&gt;&lt;br /&gt;You must be wondering why the hell I chose OllyDbg to make a simple hex edit in the previous post. The truth is, I was using it to try and study at exactly what point the SSL protocol is chosen and I found it at 0×414356.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6e3sPE0V0d4ifk0QaX2RHowbTs5W99-oVs-P6Qw-jNgsmYHV6j29OefnHMaognonxF7yAbcTGSknTaomc5Kdnsb_D7FwPIvY-6IBbBGKA3J2EEZ0e_P5Ipkj9O5PQn7DVwmdoFb6bD_Ca/s1600-h/stgwbe.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6e3sPE0V0d4ifk0QaX2RHowbTs5W99-oVs-P6Qw-jNgsmYHV6j29OefnHMaognonxF7yAbcTGSknTaomc5Kdnsb_D7FwPIvY-6IBbBGKA3J2EEZ0e_P5Ipkj9O5PQn7DVwmdoFb6bD_Ca/s200/stgwbe.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5092632100794904050&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By changing the CMP operation as in the picture above with 0×2E instead of 0×00, I can get the client to select plain old HTTP to speak to the main server. This is good, because I can now look at all the Web Service calls it makes and hopefully try to write a Linux version.&lt;br /&gt;One other reason I chose OllyDbg is to study what the client actually does. My next quest is to study where my credentials are stored. Since this is Windows, I figure the first place to look would be the registry. By sniffing around the “string references” of the client, I did notice a specific registry key which is referenced: “HKEY_CURRENT_USER\Software\Starfield\WBEN\Settings”&lt;br /&gt; &lt;br /&gt;Examining this registry key with regedit, I see the following:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKkfZp9Za3NsGwzwR2GO8cbxoViam-5Di-CnXfbl-lyrHEjpR1yYKKrt3A6GzrBeOFlf8iLCh0XxyfhjlLbyDkLKTDbI57e8fEeOEOJfKY_inShFPGYX0YD6LveahxRx0pNVyY_tejZa8P/s1600-h/registry.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKkfZp9Za3NsGwzwR2GO8cbxoViam-5Di-CnXfbl-lyrHEjpR1yYKKrt3A6GzrBeOFlf8iLCh0XxyfhjlLbyDkLKTDbI57e8fEeOEOJfKY_inShFPGYX0YD6LveahxRx0pNVyY_tejZa8P/s200/registry.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5092632255413726722&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That looks interesting. If I count the characters, it equates to the exact number for both my email address and password*. This means that their encryption algorithm generates fixed length cipher text. This most likely means that they’re using a substitution algorithm. Tsk, tsk, tsk. Substitution algorithms rely on some form of calculation (if any) and lookup in order to generate cipher text. Again, by looking at the encrypted strings, it is possible to determine the fact that a calculation involving the string length is also done. How do I deduce this? By looking at the last two characters in my email address (d1). They are both “qq” for “om” the last two letters in “.com”. This means that both “o” and “m” are equal to “q”. Not possible in direct lookups with calculation.&lt;br /&gt;&lt;br /&gt;Another good thing is the fact that I know the credentials are stored in the registry. This shortens my hunt significantly because I only have to trace any specific registry calls to find out where the Encryption/Decryption algorithms are lurking. If I trace any references or calls to the specific registry key, then I will most likely find where the algorithms exist.&lt;br /&gt;&lt;br /&gt;Using the “search for all string references” in Olly, I try to pull up all the calls to “HKEY_CURRENT_USER\Software\Starfield\WBEN\Settings”. I end up with this list:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2ZsUJcFiK21FLwwO3LyK32sTVthyphenhyphenW2Z8FhULcOQ-2Dsn0t00XpvnMDU-WJBL_19ziWiaLmJIFgAK6GO9_D2ptQAmrmC05xzzFePB1HFzxmpGENsJua5ZNAU7Ov9L3Fx-31x1ytfg3Nyed/s1600-h/call_tree.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2ZsUJcFiK21FLwwO3LyK32sTVthyphenhyphenW2Z8FhULcOQ-2Dsn0t00XpvnMDU-WJBL_19ziWiaLmJIFgAK6GO9_D2ptQAmrmC05xzzFePB1HFzxmpGENsJua5ZNAU7Ov9L3Fx-31x1ytfg3Nyed/s200/call_tree.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5092632422917451282&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The column “Called from” is what I’m interested in. This list contains all the addresses where the call to this registry key is made. I now have to follow each one and see if there is a “RegistrySetValue” call made. I look through each call one by one until I stumble upon this one:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPq71Sun5CglpbV-g-1uTJAUdBh5J_OmfsjiUPx_a11hdle4DToOd0xDvQLVFiWNXTJyTThUIE3i3_BEHMo_4wm4e8ve_noea88SafvSKJIh9L2IcRgzJragoEu9ouKOgIjiVyTYrTZsfN/s1600-h/unicode_d1.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPq71Sun5CglpbV-g-1uTJAUdBh5J_OmfsjiUPx_a11hdle4DToOd0xDvQLVFiWNXTJyTThUIE3i3_BEHMo_4wm4e8ve_noea88SafvSKJIh9L2IcRgzJragoEu9ouKOgIjiVyTYrTZsfN/s200/unicode_d1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5092632599011110434&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It’s interesting because of the entry I have highlighted. This Unicode “d1” that’s on the stack is the registry entry for my email address. I follow this one to see where it goes and wind up discovering both the encryption and decryption algorithm. I will list them in the next part of this series. I think this post is dragging on long enough and I think it is about time I wrap it up. I will do just that in the next post and save everyone a lot of misery. I have successfully reversed the encryption/decryption algorithm and will post the python source code in my next post.</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/6834507003121041200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/6834507003121041200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6834507003121041200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6834507003121041200'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2007/07/dissecting-godaddy-email-notifier-part_29.html' title='Dissecting the GoDaddy email notifier - Part 3'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6e3sPE0V0d4ifk0QaX2RHowbTs5W99-oVs-P6Qw-jNgsmYHV6j29OefnHMaognonxF7yAbcTGSknTaomc5Kdnsb_D7FwPIvY-6IBbBGKA3J2EEZ0e_P5Ipkj9O5PQn7DVwmdoFb6bD_Ca/s72-c/stgwbe.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-703533675154079623</id><published>2007-07-14T04:47:00.001+07:00</published><updated>2007-07-14T04:53:16.570+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reverse Engineering"/><title type='text'>Dissecting the GoDaddy email notifier - Part 2</title><content type='html'>Welcome back.  In our last installment, we had just figured out that the GoDaddy Email notifier uses SSL to communicate with the server.  Today, I will look at ways of trying to bypass this and sniff traffic in order to figure out how the client communicates with the server.&lt;br /&gt;&lt;br /&gt;Like I described in my previous post, I hooked up an stunnel/replug proxy chain to try and decrypt traffic, sniff it, and encrypt the traffic back on its way to the server.  I first setup stunnel in both daemon and client modes.  Here is a description of each:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Daemon mode.&lt;/strong&gt;  This instance of stunnel will listen on localhost:443 and forward traffic to localhost:8888 all over SSL.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sheran@azazel:~$ sudo stunnel -d 443 -r localhost:8888&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;strong&gt;Client mode.&lt;/strong&gt;  This instance will listen in non-SSL mode on port 8889 and re-establish the connection in SSL mode to the server. (When sniffing traffic, the DNS lookup for the notifier was noted.  It looks up email.secureserver.net)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sheran@azazel:~$ sudo stunnel -c -d 8889 -r email.secureserver.net:443&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;How do we plug the hole in the middle? Simple, use replug found in &lt;a href=&quot;http://www.sockpuppet.org/blackbag-0.9.tgz&quot;&gt;BlackBag&lt;/a&gt;.  Here&#39;s how:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sheran@azazel:~$ bkb replug localhost:8889@8888&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This will start replug and listen on localhost:8888.  Whatever it listens to on this port it will forward down to localhost:8889.  The way traffic flows will be similar to this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Client ---&amp;gt; localhost:443 (stunnel) ---&amp;gt; localhost:8888 (replug) ---&amp;gt; localhost:8889 (stunnel) ---&amp;gt; email.secureserver.net:443&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now for the client to think it&#39;s talking to an authentic server, I need to replicate the server certificate as well.  This is not going to be an easy task since I don&#39;t own a CA; especially not the one that issues GoDaddy&#39;s certificates.  So I do the next best thing and create a self-signed certificate almost identical to the GoDaddy certificate (weirder things have worked for me in the past).  No dice.  The client notifier program refuses to negotiate SSL with my first instance of stunnel.  Shit.&lt;br /&gt;&lt;br /&gt;Since this is not going to be as simple as I thought, I will have to resort to the next best thing: disassemble the notifier executable and try to patch it to talk non-SSL.  So I fire up my favorite disassembler OllyDbg and try to locate any strings in the executable to give me a clue as to where the connection is made.&lt;br /&gt;&lt;br /&gt;Well, here&#39;s something.  Looking through strings (Right-click-&gt;Search for-&gt;All Referenced Strings) gives me several entries to a string reference called &quot;http://&quot; and &quot;https://&quot;.  I wonder if changing &quot;https://&quot; to &quot;http://&quot; will have any effect.  Let&#39;s see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYQOYTr2nFO9r9QTXZj4gd0uZ3ROObIVfWGi6K7oMzDCABb3PjD12M3yepsVTVyaNx-EQ4CX4Kfvi5W8avzwvNVwsRNP0USLR9GRr67xDJd3x7F5N12gVRz83v_0USFeWOuc6nG5v-XNtZ/s1600-h/strings_https.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYQOYTr2nFO9r9QTXZj4gd0uZ3ROObIVfWGi6K7oMzDCABb3PjD12M3yepsVTVyaNx-EQ4CX4Kfvi5W8avzwvNVwsRNP0USLR9GRr67xDJd3x7F5N12gVRz83v_0USFeWOuc6nG5v-XNtZ/s400/strings_https.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5086801627207945298&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the &quot;Strings window&quot;, right click and do a &quot;Follow in Disassembler&quot;; then when you&#39;re in the disassembler window, right click on the line with the &quot;https://&quot; and do a &quot;Follow in Dump&quot;-&gt;&quot;Immediate Constant&quot;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW7oMQeENS8JyxZMdzN7VztvpolN81JXLlUBEBRXvJ2KR1vsDVvSwPWNrAfOnguEeBg_8xzNpirfuiUldJYmb4LZ-I07HjYNcow4tw3izLYR0UmgnHpLQQglW1K0IDt8dXYVJwH_mDVkfz/s1600-h/follow_string.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW7oMQeENS8JyxZMdzN7VztvpolN81JXLlUBEBRXvJ2KR1vsDVvSwPWNrAfOnguEeBg_8xzNpirfuiUldJYmb4LZ-I07HjYNcow4tw3izLYR0UmgnHpLQQglW1K0IDt8dXYVJwH_mDVkfz/s400/follow_string.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5086801910675786850&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This should then bring the string up on the lower left window where you can change the &quot;https://&quot; entry to &quot;http://&quot;.  Then, right-click, choose &quot;Copy to Executable&quot;, right-click on the window that opens up and select &quot;Save File&quot;.  Save it as another name and try it out for yourself.  Now you can see all the traffic flowing between the client and server on Wireshark.&lt;br /&gt;&lt;br /&gt;At this point, you will notice that GoDaddy&#39;s email notifier uses SOAP to transfer XML messages to and from the server.  The URL is &lt;a href=&quot;https://email.secureserver.net/soap/public.php&quot;&gt;https://email.secureserver.net/soap/public.php&lt;/a&gt; and a listing of available operations and WSDL file.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKIruIp9-ox1j43w92CIXLuP8DuTjtJOmk8oeeEnIOsUOg0P73Cqn_kPz8Jrt2ZC4J-tYqQfMogcu51j4cIi_Q-tjtn88iIZThePD7LVkjeAETbQZ4lJJ_PmEv4pDNSP42CZKNsPT4iB7H/s1600-h/soap.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKIruIp9-ox1j43w92CIXLuP8DuTjtJOmk8oeeEnIOsUOg0P73Cqn_kPz8Jrt2ZC4J-tYqQfMogcu51j4cIi_Q-tjtn88iIZThePD7LVkjeAETbQZ4lJJ_PmEv4pDNSP42CZKNsPT4iB7H/s400/soap.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5086802043819773042&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I personally felt that it was easier to get the client to do various operations and sniff the traffic to get an idea of how things are implemented.  I think I&#39;m well on my way to writing my linux variant of the notifier.&lt;br /&gt;&lt;br /&gt;Next time, I&#39;ll look into how the credentials are stored and if they are encrypted and if this is a trivial encryption to break.</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/703533675154079623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/703533675154079623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/703533675154079623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/703533675154079623'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2007/07/dissecting-godaddy-email-notifier-part_14.html' title='Dissecting the GoDaddy email notifier - Part 2'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYQOYTr2nFO9r9QTXZj4gd0uZ3ROObIVfWGi6K7oMzDCABb3PjD12M3yepsVTVyaNx-EQ4CX4Kfvi5W8avzwvNVwsRNP0USLR9GRr67xDJd3x7F5N12gVRz83v_0USFeWOuc6nG5v-XNtZ/s72-c/strings_https.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-4606053718691115928</id><published>2007-07-05T00:21:00.000+07:00</published><updated>2007-07-06T00:25:57.797+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reverse Engineering"/><title type='text'>Dissecting the GoDaddy email notifier - Part 1</title><content type='html'>I host at GoDaddy.  Yes, yes, I know there have been horror stories and there is even a &lt;a href=&quot;http://www.nodaddy.com/&quot;&gt;site &lt;/a&gt;that lists incidents involving the shutting down of some sites with little or no warning; but they&#39;re dirt cheap and I&#39;m poor so...&lt;br /&gt;&lt;br /&gt;Anyway, GoDaddy has this &lt;a href=&quot;https://email.secureserver.net/notifier.php&quot;&gt;email notifier&lt;/a&gt; which will check your mailbox to see if you&#39;ve got new mail without logging into the horribly slow Web Based email client.  It&#39;s fairly convenient, but only installs on Windows.  I wanted to do two things with this notifier:&lt;br /&gt;&lt;br /&gt;1.See how safely it actually kept my credentials.&lt;br /&gt;2. See how it communicated with the server and if it was secure as well.&lt;br /&gt;&lt;br /&gt;I then wanted to see how easy it was to have a version written for Linux so that I can use it on my Ubuntu box.&lt;br /&gt;&lt;br /&gt;I don&#39;t know how many of you have nodded off by now and how many of you wondering why I even bother.  The truth is, its important to me, its my blog and it will also hopefully enlighten you on how you can go about conducting an analysis on a network application.  In this regard, this is what I will be doing with this application:&lt;br /&gt;&lt;br /&gt;1. Examining the communication between notifier and server&lt;br /&gt;2. Identifying how the credentials are stored and if they are encrypted&lt;br /&gt;3. Attempting to decrypt the credentials if it proves easy to do so&lt;br /&gt;4. Writing my own Linux version of the tool.  Either a Gnome Applet or Firefox Extension (whichever is easier)&lt;br /&gt;&lt;br /&gt;Since this will be an ongoing saga of sorts, I will break it down into several posts for managability&#39;s sake.  It also gives me time to conduct my research and publish the findings without waiting till the end.&lt;br /&gt;&lt;br /&gt;Right, let&#39;s begin...&lt;br /&gt;&lt;br /&gt;As with all applications, I downloaded and installed the tool.  The notifier is in the form of a small envelope that sits in your taskbar  &lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin7IBpFlPAKgCEtQa_RwGDqUS1I88hsJG3HVxzUXEbMVuyVHNZVXmyTK9GmleuqJqz7jhn1_L95zzb6A3q06JKo8W6nRf4hiXkT7bEOh_tZKeuiePh_jcgh3GBpgokjBAdZwT7TNlzbZEi/s1600-h/taskbar.png&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; absmiddle=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin7IBpFlPAKgCEtQa_RwGDqUS1I88hsJG3HVxzUXEbMVuyVHNZVXmyTK9GmleuqJqz7jhn1_L95zzb6A3q06JKo8W6nRf4hiXkT7bEOh_tZKeuiePh_jcgh3GBpgokjBAdZwT7TNlzbZEi/s200/taskbar.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5083764806619602802&quot; align=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;.  You can configure it to check up to 5 email addresses and specify such settings as duration between email checks, how long to display messages for and how many new messages to display in a small popup window.  All fairly simple.&lt;br /&gt;&lt;br /&gt;My first order of business is to check how the tool communicates with the server.  So I fire up Wireshark and sniff a few packets.  Immediately, it is apparent that the tool uses SSL.  Points for GoDaddy.  No casual sniffing can be done.  This puts a dent in my plans of attempting to write a Linux version.  How can I write one, when I don&#39;t know what it says to the server?  I can always try an MITM SSL sniffing exercise.  The idea for this one is as simple as this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-Ft5CysiDr2a-mDVMfC8ciHrjuFc2hmrp8oXq2_q1nHbJiC9H-GfTwe7gKOCx5FY4WUwqhCJ2sxGidamBdAgCd8UmXBoFAF70WuZ5aHqHS8Gx7XXZjP_NHwZcj3mLPsSX5gMt1TdgFTdG/s1600-h/mitm.png&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-Ft5CysiDr2a-mDVMfC8ciHrjuFc2hmrp8oXq2_q1nHbJiC9H-GfTwe7gKOCx5FY4WUwqhCJ2sxGidamBdAgCd8UmXBoFAF70WuZ5aHqHS8Gx7XXZjP_NHwZcj3mLPsSX5gMt1TdgFTdG/s200/mitm.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5083765283360972674&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This can all be achieved by using stunnel and the replug tool found in Matasano&#39;s BlackBag.  As a matter of fact, Dave Goldsmith has an &lt;a href=&quot;http://www.matasano.com/log/843/mitming-an-sslized-java-app/&quot;&gt;article &lt;/a&gt;on the Matasano Blog about how he did this for a Java Application.  In his case, it was a fairly easy workaround to bypass the certificate validation.  I don&#39;t know how easy it will be for this specific application.  But I&#39;m getting ahead of myself. Join me for the next post where I setup the stunnel/replug proxy chain, discover if proper certificate validation is done and look for a way around the SSL communication.</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/4606053718691115928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/4606053718691115928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/4606053718691115928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/4606053718691115928'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2007/07/dissecting-godaddy-email-notifier-part.html' title='Dissecting the GoDaddy email notifier - Part 1'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin7IBpFlPAKgCEtQa_RwGDqUS1I88hsJG3HVxzUXEbMVuyVHNZVXmyTK9GmleuqJqz7jhn1_L95zzb6A3q06JKo8W6nRf4hiXkT7bEOh_tZKeuiePh_jcgh3GBpgokjBAdZwT7TNlzbZEi/s72-c/taskbar.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-6997140161172645873</id><published>2007-06-20T00:23:00.000+07:00</published><updated>2007-07-05T00:35:10.923+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Forensics"/><title type='text'>Memory Card Forensics</title><content type='html'>So I&#39;m looking into forensics and I remember reading about how some guys would buy used hard drives belonging to hospitals or banks and do some recovery on the data and come up with some interesting stuff and I think, why not try it on Memory Cards?&lt;br /&gt;&lt;br /&gt;Sure, it&#39;s not an original idea, but a quick look on one of the local online auction sites says that for a relatively small amount, I can buy someone&#39;s memory card and potentially have access to a fair amount of his personal data.&lt;br /&gt;&lt;br /&gt;Depending on where the card was used, I&#39;m looking at quite a number of possibilities relating to information that I can dig up.  Contact details, people he&#39;s called, photos and videos he&#39;s taken (could be some raunchy stuff on there as well :D ) and literally anything he&#39;s stored on his card.  I&#39;m betting on the fact that Mr. Average Joe will not do a DoD wipe on his SD card before deciding to sell it.&lt;br /&gt;&lt;br /&gt;But to test this theory, I thought I&#39;d try out one of my own memory cards.  If you look at my post for &lt;a href=&quot;http://chirashi-security.blogspot.com/2007/06/in-place-carving-can-save-you-fair.html&quot;&gt;&quot;Installing CarvFS on Ubuntu 7.04&quot;&lt;/a&gt;, you will get an idea of in-place carving.  I will adopt this technique for sniffing through my own (and eventually others) memory cards.  So here goes:&lt;br /&gt;&lt;br /&gt;I have this USB Disk which is 64Mb in size and I think it will be perfect for this demo.  I first mount it and take a look at the contents:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sheran@azazel:~/Personal/research$ sudo mount /dev/sdb1 /media/usbdisk&lt;br /&gt;sheran@azazel:~/Personal/research$ ls -alrt /media/usbdisk&lt;br /&gt;total 17&lt;br /&gt;drwxr-xr-x 8 root   root    4096 2007-06-19 12:21 ..&lt;br /&gt;drwx------ 2 root   root   12288 2007-06-19 12:24 lost+found&lt;br /&gt;drwxr-xr-x 3 sheran sheran  1024 2007-06-19 12:24 .&lt;br /&gt;sheran@azazel:~/Personal/research$ df -kh /media/usbdisk&lt;br /&gt;Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;/dev/sdb1              61M  1.3M   56M   3% /media/usbdisk&lt;br /&gt;sheran@azazel:~/Personal/research$&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That&#39;s pretty much the disk.  I had run &lt;em&gt;cfdisk&lt;/em&gt; and &lt;em&gt;mke2fs&lt;/em&gt; previously on the Windows formatted USB Disk.  I now image it with &lt;em&gt;&#39;ewfacquire&#39;&lt;/em&gt; which you don&#39;t get to see, but I end up with the file &lt;em&gt;usbdisk.E01&lt;/em&gt;.  I can now mount this file using CarvFS.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sheran@azazel:~/Personal/research$ sudo -s&lt;br /&gt;root@azazel:~/Personal/research# carvfs /mnt/carvfs/ ewf usbdisk.E01&lt;br /&gt;/mnt/carvfs//f183a8e2b50834552f9302b08251d4db&lt;br /&gt;root@azazel:~/Personal/research# cd /mnt/carvfs/f183a8e2b50834552f9302b08251d4db/&lt;br /&gt;root@azazel:/mnt/carvfs/f183a8e2b50834552f9302b08251d4db# ls -alrt&lt;br /&gt;total 63616&lt;br /&gt;-rw-rw-rw- 1 root root     2545 1970-01-01 04:00 README&lt;br /&gt;-rw------- 1 root root       85 1970-01-01 04:00 ocfa.missing&lt;br /&gt;-r--r--r-- 1 root root 65135616 1970-01-01 04:00 CarvFS.crv&lt;br /&gt;d--x--x--x 3 root root        0 1970-01-01 04:00 CarvFS&lt;br /&gt;drwxr-xr-x 3 root root        0 1970-01-01 04:00 .&lt;br /&gt;drwxr-xr-x 3 root root     4096 2007-06-19 13:28 ..&lt;br /&gt;root@azazel:/mnt/carvfs/f183a8e2b50834552f9302b08251d4db#&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now I run &lt;em&gt;&#39;scalpel&#39;&lt;/em&gt; in preview mode with the configuration file set to grab graphic files:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;root@azazel:~/Personal/research# scalpel -p -c ./scalpel_gfx.conf /mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv&lt;br /&gt;Scalpel version 1.60&lt;br /&gt;Written by Golden G. Richard III, based on Foremost 0.69.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Opening target &quot;/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Image file pass 1/2.&lt;br /&gt;/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  16.1%    10.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  32.2%    20.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  48.3%    30.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  64.4%    40.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  80.5%    50.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  96.6%    60.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv: 100.0%    62.1 MB    00:00 ETAAllocating work queues...&lt;br /&gt;Work queues allocation complete. Building carve lists...&lt;br /&gt;Carve lists built.  Workload:&lt;br /&gt;gif with header &quot;\x47\x49\x46\x38\x37\x61&quot; and footer &quot;\x00\x3b&quot; --&gt; 0 files&lt;br /&gt;gif with header &quot;\x47\x49\x46\x38\x39\x61&quot; and footer &quot;\x00\x3b&quot; --&gt; 146 files&lt;br /&gt;jpg with header &quot;\xff\xd8\xff\xe0\x00\x10&quot; and footer &quot;\xff\xd9&quot; --&gt; 22 files&lt;br /&gt;png with header &quot;\x50\x4e\x47\x3f&quot; and footer &quot;\xff\xfc\xfd\xfe&quot; --&gt; 0 files&lt;br /&gt;** PREVIEW MODE: GENERATING AUDIT LOG ONLY **&lt;br /&gt;** NO CARVED FILES WILL BE WRITTEN **&lt;br /&gt;Carving files from image.&lt;br /&gt;Image file pass 2/2.&lt;br /&gt;/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  16.1%    10.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  48.3%    30.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv:  96.6%    60.0 MB    00/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS.crv: 100.0%    62.1 MB    00:00 ETAProcessing of image file complete. Cleaning up...&lt;br /&gt;Done.&lt;br /&gt;Scalpel is done, files carved = 168, elapsed = 3 seconds.&lt;br /&gt;root@azazel:~/Personal/research#&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And I find 146 GIF files and 22 JPGs.  Usually, scalpel can be used to extract these files and place them in another directory.  The beauty of CarvFS is in the fact that you can add symlinks to the CarvFS image and these symlinks directly refer to offsets within the &lt;em&gt;&#39;usbdisk.E01&#39;&lt;/em&gt; image.  CarvFS comes with a tool called &#39;scalpelcp&#39; which does just this.  I had to edit the script so that it works fine, because there was a problem with the &lt;em&gt;&quot;$basepath&quot;&lt;/em&gt; variable.  But anyway, here goes:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;root@azazel:~/Personal/research# scalpelcp&lt;br /&gt;Usage: scalpelcp &amp;lt;outputdir&amp;gt; &amp;lt;basepath&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;this tool is meant to be used in conjunction with scalpel (&gt;= 1.6)&lt;br /&gt;run in preview mode (that is using the -p option that scalpel provides)&lt;br /&gt;on carvpath pseudo files.&lt;br /&gt;Scalpelcp will parse the audit.txt file and populate the scalpel output&lt;br /&gt;directory with symlinks to valid sub-carvpaths extracted from the audit file&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;root@azazel:~/Personal/research# scalpelcp ./scalpel-output/ /mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS/&lt;br /&gt;Target=/mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS&lt;br /&gt;symlinked 168 filenames to zero-storage carvpaths&lt;br /&gt;root@azazel:~/Personal/research# cd scalpel-output/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;oot@azazel:~/Personal/research/scalpel-output# ls&lt;br /&gt;00000000.gif  00000034.gif  00000068.gif  00000102.gif  00000136.gif&lt;br /&gt;00000001.gif  00000035.gif  00000069.gif  00000103.gif  00000137.gif&lt;br /&gt;00000002.gif  00000036.gif  00000070.gif  00000104.gif  00000138.gif&lt;br /&gt;00000003.gif  00000037.gif  00000071.gif  00000105.gif  00000139.gif&lt;br /&gt;00000004.gif  00000038.gif  00000072.gif  00000106.gif  00000140.gif&lt;br /&gt;00000005.gif  00000039.gif  00000073.gif  00000107.gif  00000141.gif&lt;br /&gt;00000006.gif  00000040.gif  00000074.gif  00000108.gif  00000142.gif&lt;br /&gt;00000007.gif  00000041.gif  00000075.gif  00000109.gif  00000143.gif&lt;br /&gt;00000008.gif  00000042.gif  00000076.gif  00000110.gif  00000144.gif&lt;br /&gt;00000009.gif  00000043.gif  00000077.gif  00000111.gif  00000145.gif&lt;br /&gt;00000010.gif  00000044.gif  00000078.gif  00000112.gif  00000146.jpg&lt;br /&gt;00000011.gif  00000045.gif  00000079.gif  00000113.gif  00000147.jpg&lt;br /&gt;00000012.gif  00000046.gif  00000080.gif  00000114.gif  00000148.jpg&lt;br /&gt;00000013.gif  00000047.gif  00000081.gif  00000115.gif  00000149.jpg&lt;br /&gt;00000014.gif  00000048.gif  00000082.gif  00000116.gif  00000150.jpg&lt;br /&gt;00000015.gif  00000049.gif  00000083.gif  00000117.gif  00000151.jpg&lt;br /&gt;00000016.gif  00000050.gif  00000084.gif  00000118.gif  00000152.jpg&lt;br /&gt;00000017.gif  00000051.gif  00000085.gif  00000119.gif  00000153.jpg&lt;br /&gt;00000018.gif  00000052.gif  00000086.gif  00000120.gif  00000154.jpg&lt;br /&gt;00000019.gif  00000053.gif  00000087.gif  00000121.gif  00000155.jpg&lt;br /&gt;00000020.gif  00000054.gif  00000088.gif  00000122.gif  00000156.jpg&lt;br /&gt;00000021.gif  00000055.gif  00000089.gif  00000123.gif  00000157.jpg&lt;br /&gt;00000022.gif  00000056.gif  00000090.gif  00000124.gif  00000158.jpg&lt;br /&gt;00000023.gif  00000057.gif  00000091.gif  00000125.gif  00000159.jpg&lt;br /&gt;00000024.gif  00000058.gif  00000092.gif  00000126.gif  00000160.jpg&lt;br /&gt;00000025.gif  00000059.gif  00000093.gif  00000127.gif  00000161.jpg&lt;br /&gt;00000026.gif  00000060.gif  00000094.gif  00000128.gif  00000162.jpg&lt;br /&gt;00000027.gif  00000061.gif  00000095.gif  00000129.gif  00000163.jpg&lt;br /&gt;00000028.gif  00000062.gif  00000096.gif  00000130.gif  00000164.jpg&lt;br /&gt;00000029.gif  00000063.gif  00000097.gif  00000131.gif  00000165.jpg&lt;br /&gt;00000030.gif  00000064.gif  00000098.gif  00000132.gif  00000166.jpg&lt;br /&gt;00000031.gif  00000065.gif  00000099.gif  00000133.gif  00000167.jpg&lt;br /&gt;00000032.gif  00000066.gif  00000100.gif  00000134.gif  audit.txt&lt;br /&gt;00000033.gif  00000067.gif  00000101.gif  00000135.gif&lt;br /&gt;root@azazel:~/Personal/research/scalpel-output#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And here are all my symlinked files.  If you do a long listing you can see how the files are actually symlinked:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;root@azazel:~/Personal/research/scalpel-output# ls -alrt | tail -n 5&lt;br /&gt;lrwxrwxrwx 1 root   root      67 2007-06-19 13:44 00000003.gif -&gt; /mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS/1206784:269.crv&lt;br /&gt;lrwxrwxrwx 1 root   root      67 2007-06-19 13:44 00000002.gif -&gt; /mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS/1205760:200.crv&lt;br /&gt;lrwxrwxrwx 1 root   root      68 2007-06-19 13:44 00000001.gif -&gt; /mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS/1203712:1231.crv&lt;br /&gt;lrwxrwxrwx 1 root   root      66 2007-06-19 13:44 00000000.gif -&gt; /mnt/carvfs/f183a8e2b50834552f9302b08251d4db/CarvFS/1203200:50.crv&lt;br /&gt;drwxr-xr-- 2 root   root    4096 2007-06-19 13:44 .&lt;br /&gt;root@azazel:~/Personal/research/scalpel-output#&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Lastly, all that&#39;s left is to start up an image viewer program or plain old nautilus and see what the directory holds:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtMdeSY05qnBP0ddxUMRvSJkNCMFzylBM0AHNQq8TfA2qDov_4M2SfbKzJ7jPaevIYeGCZqpNkJNXOjllZMv6yfP45dW9glG4t4GWJDjOQDxdFehAyyD428nuRAKbEHZL9dg80XyiYjNgv/s1600-h/scalpel.png&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtMdeSY05qnBP0ddxUMRvSJkNCMFzylBM0AHNQq8TfA2qDov_4M2SfbKzJ7jPaevIYeGCZqpNkJNXOjllZMv6yfP45dW9glG4t4GWJDjOQDxdFehAyyD428nuRAKbEHZL9dg80XyiYjNgv/s200/scalpel.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5083394713582673762&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That&#39;s it for now.  I&#39;m off to buy some more memory cards.  Be very careful if you know me and hear me ask you innocently, &quot;Hey, can I borrow your camera?&quot;</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/6997140161172645873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/6997140161172645873' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6997140161172645873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6997140161172645873'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2007/07/memory-card-forensics.html' title='Memory Card Forensics'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtMdeSY05qnBP0ddxUMRvSJkNCMFzylBM0AHNQq8TfA2qDov_4M2SfbKzJ7jPaevIYeGCZqpNkJNXOjllZMv6yfP45dW9glG4t4GWJDjOQDxdFehAyyD428nuRAKbEHZL9dg80XyiYjNgv/s72-c/scalpel.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-6906075838454163576</id><published>2007-06-19T00:19:00.000+07:00</published><updated>2007-07-05T00:33:53.938+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Forensics"/><category scheme="http://www.blogger.com/atom/ns#" term="HOWTO"/><title type='text'>Installing CarvFS on Ubuntu 7.04</title><content type='html'>In place carving can save you a fair amount of space.  There was a paper written about it and the Dutch National Police Agency also wrote a tool called CarvFS that does exactly this.  What CarvFS allows you to do is mount an EWF image or raw &lt;em&gt;&#39;dd&#39;&lt;/em&gt; image and reference blocks of data by using a specific directory listing format.  At it&#39;s simplest level, you could run &lt;em&gt;&#39;strings&#39;&lt;/em&gt; on a set of 1024 bytes beginning at the first byte by doing this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;root@azazel:/mnt/carvfs/524a4efcaa84cf7391705b2b292644a6# strings CarvFS/0:1024.crv&lt;br /&gt;NO NAME    FAT16&lt;br /&gt;root@azazel:/mnt/carvfs/524a4efcaa84cf7391705b2b292644a6#&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I&#39;ll leave you to work out why this is useful; alternatively you can also read my &lt;a href=&quot;http://chirashi-security.blogspot.com/2007/07/memory-card-forensics.html&quot;&gt;&quot;Memory Card Forensics&quot;&lt;/a&gt; post.  Here is how I installed CarvFS:&lt;br /&gt;&lt;br /&gt;Downloaded the source packages for &lt;em&gt;CarvFS, libcarvpath, libewf&lt;/em&gt; and &lt;em&gt;fuse.&lt;/em&gt;  They can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://downloads.sourceforge.net/ocfa/carvfs-0.2.1.tar.gz&quot;&gt;CarvFS 0.2.1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://downloads.sourceforge.net/ocfa/libcarvpath-0.1.4.tar.gz&quot;&gt;libcarvpath 0.1.4&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.uitwisselplatform.nl/frs/download.php/192/libewf-beta-20061223.tar.gz&quot;&gt;libewf-beta-20061223&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://downloads.sourceforge.net/fuse/fuse-2.6.5.tar.gz&quot;&gt;fuse 2.6.5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There&#39;s no specific order, but make sure that libewf, fuse and libcarvpath are installed before CarvFS.&lt;br /&gt;&lt;br /&gt;I believe &lt;em&gt;fuse&lt;/em&gt; should already be running as a kernel module in 7.04, so the kernel module will not be built.&lt;br /&gt;&lt;br /&gt;Then, once you install CarvFS, you&#39;re pretty much ready to go.  I had one problem when I ran &lt;em&gt;carvfs&lt;/em&gt; I received a library not found error for &lt;em&gt;libfuse.so.2&lt;/em&gt;.  The library itself was in &lt;em&gt;/usr/local/lib&lt;/em&gt;, but there was no entry in &lt;em&gt;/etc/ld.so.conf&lt;/em&gt;.  So I added the entry and ran &lt;em&gt;ldconfig&lt;/em&gt; and all was well.&lt;br /&gt;&lt;br /&gt;How will you test CarvFS? First, you will need either a raw &lt;em&gt;&#39;dd&#39;&lt;/em&gt; image or an EWF image.  &lt;em&gt;libewf&lt;/em&gt; will install a tool called &lt;em&gt;&#39;ewfacquire&#39;&lt;/em&gt; which you can use to make EWF images.  Here is an excerpt of one of my sessions:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;sheran@azazel:~/Personal/research$ ewfacquire /dev/sdb1&lt;br /&gt;ewfacquire 20061223 (libewf 20061223, zlib 1.2.3, libcrypto 0.9.8)&lt;br /&gt;Information about acquiry required, please provide the necessary input&lt;br /&gt;Image path and filename without extension: usbdisk&lt;br /&gt;Case number: 1923&lt;br /&gt;Description: USB Disk&lt;br /&gt;Evidence number: 12&lt;br /&gt;Examiner name: Sheran&lt;br /&gt;Notes: 64Mb USB Disk used for Forensics tests&lt;br /&gt;Media type (fixed, removable) [fixed]: removable&lt;br /&gt;Use compression (none, fast, best) [none]: best&lt;br /&gt;Use EWF file format (smart, ftk, encase1, encase2, encase3, encase4, encase5, linen5, ewfx) [encase5]:&lt;br /&gt;Start to acquire at offset (0 &gt;= value &gt;= 65135616) [0]:&lt;br /&gt;Amount of bytes to acquire (0 &gt;= value &gt;= 65135616) [65135616]:&lt;br /&gt;Evidence segment file size in kbytes (2^10) (1440 &gt;= value &gt;= 2097152) [665600]:&lt;br /&gt;The amount of sectors to read at once (64, 128, 256, 512, 1024, 2048, 4096) [64]: 512&lt;br /&gt;The amount of sectors to be used as error granularity (1 &gt;= value &gt;= 512) [64]:&lt;br /&gt;The amount of retries when a read error occurs (0 &gt;= value &gt;= 255) [2]:&lt;br /&gt;Wipe sectors on read error (mimic EnCase like behavior) (yes, no) [yes]:&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;It goes on to acquire an EWF image of my 64Mb USB Disk.&lt;br /&gt;&lt;br /&gt;The next step would be to mount it.  Create a mount point for it first.  I use &lt;em&gt;/mnt/carvfs&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;sheran@azazel:~/Personal/research$ sudo carvfs /mnt/carvfs ewf usbdisk.E01 /mnt/carvfs/fad545a8c4c86973eb0ae33da06e9c80&lt;br /&gt;sheran@azazel:~/Personal/research$&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now that the image is mounted, switch to the root prompt (I wasted some time on this one) and then go into the mounted image:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;root@azazel:/mnt/carvfs/fad545a8c4c86973eb0ae33da06e9c80# ls -alrt&lt;br /&gt;total 63617&lt;br /&gt;-rw-rw-rw- 1 root root     2545 1970-01-01 04:00 README&lt;br /&gt;-r--r--r-- 1 root root     1397 1970-01-01 04:00 ocfa.xml&lt;br /&gt;-r--r--r-- 1 root root 65135616 1970-01-01 04:00 CarvFS.crv&lt;br /&gt;d--x--x--x 3 root root        0 1970-01-01 04:00 CarvFS&lt;br /&gt;drwxr-xr-x 3 root root        0 1970-01-01 04:00 .&lt;br /&gt;drwxr-xr-x 5 root root     4096 2007-06-18 17:43 ..&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I then ran a strings on the first 512 bytes like so:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;root@azazel:/mnt/carvfs/fad545a8c4c86973eb0ae33da06e9c80# strings CarvFS/0:512.crv&lt;br /&gt;MSDOS5.0&lt;br /&gt;NO NAME    FAT32   3&lt;br /&gt;f`f;F&lt;br /&gt;fXfXfXfX&lt;br /&gt;NTLDR&lt;br /&gt;Remove disks or other media.&lt;br /&gt;Disk error&lt;br /&gt;Press any key to restart&lt;br /&gt;root@azazel:/mnt/carvfs/fad545a8c4c86973eb0ae33da06e9c80#&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;That&#39;s about it.&lt;br /&gt;&lt;br /&gt;I know my instructions probably suck big time, but I didn&#39;t want to waste too much time in actually telling you how to do some of the other things.  Anyway, if you&#39;re sniffing around CarvFS you probably know how to do most of the stuff anyway.  If, however, you still want to know stepwise details, drop me a comment or mail me.&lt;br /&gt;&lt;br /&gt;Till then.</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/6906075838454163576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/6906075838454163576' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6906075838454163576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/6906075838454163576'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2007/06/in-place-carving-can-save-you-fair.html' title='Installing CarvFS on Ubuntu 7.04'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7312640465707645146.post-4814686420516197999</id><published>2007-04-10T00:17:00.000+07:00</published><updated>2007-07-05T00:32:30.273+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="General"/><title type='text'>Teh First Post</title><content type='html'>Welcome to the Chirsashi Security blog! As is evident, this is teh first post. Setting up Wordpress and all that sort of thing, nothing much to write in this one.</content><link rel='replies' type='application/atom+xml' href='http://chirashi-security.blogspot.com/feeds/4814686420516197999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7312640465707645146/4814686420516197999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/4814686420516197999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7312640465707645146/posts/default/4814686420516197999'/><link rel='alternate' type='text/html' href='http://chirashi-security.blogspot.com/2007/04/welcome-to-chirsashi-security-blog-as.html' title='Teh First Post'/><author><name>Chopstick</name><uri>http://www.blogger.com/profile/13036503882054759991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>