<?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: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-8293257832782306047</id><updated>2011-10-25T04:32:25.701-07:00</updated><category term='mobile'/><category term='contest'/><category term='quark'/><category term='fileformats'/><category term='flash'/><category term='qps'/><category term='api'/><category term='trojan'/><category term='php'/><category term='assembly'/><category term='gmail'/><title type='text'>Code++</title><subtitle type='html'>Reverse Engineering</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-849707062425131146</id><published>2010-01-07T12:13:00.002-07:00</published><updated>2010-01-07T12:42:14.520-07:00</updated><title type='text'>Found Data</title><summary type='text'>I'm always interested in found data.  Little notes buried in executables and other strange places.  These are usually intended to be seen only by those curious enough to fire up a hex editor, or do a little reverse engineering.Here's an example.  On the 68k Macintosh, executables usually only have a resource fork.  All the code is stored in CODE blocks in the resource fork.  So I was curious when</summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/849707062425131146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=849707062425131146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/849707062425131146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/849707062425131146'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2010/01/found-data.html' title='Found Data'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-7415418339752364490</id><published>2008-01-31T17:13:00.000-07:00</published><updated>2008-12-10T11:19:35.931-07:00</updated><title type='text'>Web Font Shorts</title><summary type='text'>A posting on reddit lead to a discussion on typefaces.  In particular one poster asked about the kerning of a word.  Surprisingly, the kerning was perfect for me.  I decided to compare it across the browsers I have access to.Here's the kerning in Firefox on Linux (Stock Ubuntu Gutsy):Notice how the A and V overlap?  That's correct kerning.Here's how it looks in Firefox on OSX Tiger:Aside from the</summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/7415418339752364490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=7415418339752364490' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/7415418339752364490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/7415418339752364490'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2008/01/web-font-shorts.html' title='Web Font Shorts'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_o2zvVR6cqsc/R6Jkvt2m4kI/AAAAAAAAAAQ/unZ-helB65Y/s72-c/fflinux.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-6055496888636518116</id><published>2007-11-02T12:56:00.000-07:00</published><updated>2007-11-02T16:45:54.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trojan'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Malicious Banner Ad</title><summary type='text'>We ran into a malicious banner ad yesterday.  People would randomly get redirected to a malicious website.  You can imagine that it's a pretty tough thing to diagnose. It turned out to be a flash ad. I was able to disassemble the banner ad to see how it worked.  The banner is "protected" and compressed, so hex editing the banner doesn't show any text.Using Flare to decompile the actionscript in </summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/6055496888636518116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=6055496888636518116' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/6055496888636518116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/6055496888636518116'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2007/11/malicious-banner-ad.html' title='Malicious Banner Ad'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-7424111804772182766</id><published>2007-09-06T10:33:00.000-07:00</published><updated>2007-09-06T11:10:38.882-07:00</updated><title type='text'>char pointer versus char array</title><summary type='text'>There are two basic ways to assign a string literal to a local variable.char *p = "string";char a[] = "string";I was curious to see how gcc handles the two.In both cases, "string" is put into .rodata   This means that with the first method, you must not modify the contents of "string".p[3]='o';  // this causes a segfault.So technically, the first method should be:const char *p = "string";With the</summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/7424111804772182766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=7424111804772182766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/7424111804772182766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/7424111804772182766'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2007/09/char-pointer-versus-char-array.html' title='char pointer versus char array'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-6369689124985721430</id><published>2007-07-31T16:24:00.000-07:00</published><updated>2007-08-01T13:30:18.460-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Mobile Gmail API</title><summary type='text'>Did you know that Gmail provides a handy, light-weight API for gmail?  Google's gmail midlet uses this API.Mobile Gmail BasicsFirst thing to note, all responses from the server are in the form of UTF8 string lists.  There is a 16 bit word (in network byte order) that represents the length of the string, followed by that many bytes.  Then another 16 bit word for the next string, and so on.  The </summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/6369689124985721430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=6369689124985721430' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/6369689124985721430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/6369689124985721430'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2007/07/mobile-gmail-api.html' title='Mobile Gmail API'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-1078507406261861302</id><published>2007-05-02T14:02:00.000-07:00</published><updated>2007-05-02T14:11:01.198-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contest'/><category scheme='http://www.blogger.com/atom/ns#' term='assembly'/><title type='text'>128-bit programming challenge</title><summary type='text'>Here's my entry for the 128-bit programming challenge.  Not a single lookup table in there.  The resulting stripped binary is down to exactly 500 bytes.; nasm -f elf hex.asm; ld hex.osection .textglobal  _start_start:       mov     ecx,10h       mov     esi,hex       mov     edi,bufferlp:       movzx   eax,byte [esi]       mov     ah,al       and     al,0fh       cmp     al,0ah       sbb     al,</summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/1078507406261861302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=1078507406261861302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/1078507406261861302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/1078507406261861302'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2007/05/128-bit-programming-challenge.html' title='128-bit programming challenge'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-5398220992089264967</id><published>2007-03-01T14:39:00.000-07:00</published><updated>2007-03-01T15:32:39.296-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fileformats'/><category scheme='http://www.blogger.com/atom/ns#' term='qps'/><category scheme='http://www.blogger.com/atom/ns#' term='quark'/><title type='text'>QPS Protocol</title><summary type='text'>The following describes the format of the QPS 3.5 protocol.  Earlier versions of QPS are very similar, with only minor packet changes.  All communication between the client and the QPS server is done via Messages.Message from Client to Server.0000 0002 Session ID0002 0002 Code0004 0004 Version (0x003f003f)0008 0002 Sequence Number000a 0004 Sub-Data Length000e 0004 Packet Length0012 **** Data**** </summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/5398220992089264967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=5398220992089264967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/5398220992089264967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/5398220992089264967'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2007/03/qps-protocol.html' title='QPS Protocol'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8293257832782306047.post-4496340442236183348</id><published>2007-03-01T13:07:00.000-07:00</published><updated>2007-03-01T15:33:05.396-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fileformats'/><category scheme='http://www.blogger.com/atom/ns#' term='qps'/><category scheme='http://www.blogger.com/atom/ns#' term='quark'/><title type='text'>Quark file format</title><summary type='text'>This is the file format used by Quark Copydesk.The file is broken into chunks.  Each chunk is exactly 256 bytes long.  Chunks are identified by their ID number.  Chunk 1 starts at position 0, Chunk 2 starts at position 512, and so on.  The first chunk in the file contains the header followed by the TOC.Quark Header:The first thing in this file is a 26 byte Quark Header.0000 0004 File Format </summary><link rel='replies' type='application/atom+xml' href='http://codeplusplus.blogspot.com/feeds/4496340442236183348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8293257832782306047&amp;postID=4496340442236183348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/4496340442236183348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8293257832782306047/posts/default/4496340442236183348'/><link rel='alternate' type='text/html' href='http://codeplusplus.blogspot.com/2007/03/quark-file-format.html' title='Quark file format'/><author><name>Sean</name><uri>http://www.blogger.com/profile/06911558688467600710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
