Friday, July 5, 2013

Decode Android APK file to get source code

Author:  prankul garg
Procedure for decoding .apk files, step-by-step method:

Step 1:

Make a new folder and put .apk file in it (which you want to decode). Now rename the extension of this .apk file to .zip (eg.: rename from filename.apk to filename.apk.zip) and save it. Now you get classes.dex files, etc. At this stage you are able to see drawable but not xml and java files, so continue.

Step 2:

Now extract this zip apk file in the same folder (or NEW FOLDER). Now download dex2jar from this linkhttp://code.google.com/p/dex2jar/ and extract it to the same folder (or NEW FOLDER). Now open command prompt and change directory to that folder (or NEW FOLDER). Then write dex2jar classes.dex and press enter. Now you get classes.dex.dex2jar file in the same folder. Then download java decompiler from http://java.decompiler.free.fr/?q=jdgui and now double click on jd-gui and click on open file. Then open classes.dex.dex2jar file from that folder. Now you get class files and save all these class files (click on file then click "save all sources" in jd-gui) by src name. At this stage you get java source but the xml files are still unreadable, so continue.

Step 3:

Now open another new folder and put these files
  1. put .apk file which you want to decode
  2. download apktool v1.x AND apktool install window (both can be downloaded at the same location) and put in the same folder
  3. download framework-res.apk file and put in the same folder (Not all apk file need framework-res.apk file)
  4. Open a command window
  5. Navigate to the root directory of APKtool and type the following command: apktool if framework-res.apk
  6. apktool d "fname".apk ("fname" denotes filename which you want to decode)
now you get a file folder in that folder and now you can easily read xml files also.

Step 4:

It's not any step just copy contents of both folder(in this case both new folder)to the single one
and now enjoy with source code...

Wednesday, March 6, 2013

Install tinyos on Raspberry Pi

sourcehttp://www.mail-archive.com/tinyos-help@millennium.berkeley.edu/msg43109.html
author:   Inglezakis Antonios



You have to install,the following packages from raspbian's repositories first (if they exist). |sudo apt-get install build-essential openjdk-6-jdk openjdk-6-jre python2.7 python2.7-dev automake avarice avr-libc msp430-libc avrdudebinutils-avr binutils-msp430 gcc-avr gcc-msp430 gdb-avr gdb-msp430 subversion graphviz python-docutils git checkinstall

For every needed package than does not exist in raspbian's repositories, you have to build and install it from source code!!!!


|After that, you have to download/clone tinyos source code repository from github
git clone https://github.com/tinyos/tinyos-main.git

Before the complilation of any example, you also need to install from source nesc compiler.
git clone https://github.com/tinyos/nesc.git

cd to nesc source code directory
./configure [--prefix=YOURPREFIXPATH]
make
make install ( or sudo checkinstall if YOURPREFIXPATH is in system directory)
example:

|mkdir -p $HOME/local/compilers
|

|./configure --prefix=$HOME/local/compilers
|

|make
|

|make install|

|export PATH=$HOME/local/compilers/bin:$PATH|


Then you have to build tinyos tools from source code:
|cd tinyos-main/tools
./Bootstrap
./configure --prefix=$HOME/local/tosTools
make all
make install  (or sudo checkinstall  if prefix dir is in system directory)|


After that, you need to set some enviroment variables, so that you can build any application
Create the file $HOME/local/tinyos-env.sh

   #!/bin/bash
   echo "Setting TinyOs 2 enviroment variables!"
   export PATH=$HOME/local/tosTools/bin:$PATH

   export PATH=$HOME/local/compilers/bin:$PATH
   export TOSROOT=$HOME/local/src/tinyos-2x
   export TOSDIR=$TOSROOT/tos
   export MAKERULES=$TOSROOT/support/make/Makerules
   export CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.
   export PYTHONPATH=.:$TOSROOT/support/sdk/python:$PYTHONPATH
   export PATH=$TOSROOT/support/sdk/c:$PATH|

Then make it executable:

   |chmod +x $HOME/local/tinyos-env.sh|


and make it to be loaded on every terminal start, for your user. Just add the following lines to the $????/.bashrc file.
   |# TinyOS enviroment variables
   |

   |source $HOME/local/tinyos-env.sh|


Raspberry Pi is an ARM based platform, so every precompiled package for i386 or amd64 architecture fails to be installed.
Have a nice day!

Inglezakis Antonios

Monday, March 4, 2013

Enforce software ACK on CC2420 tinyos

cc2420/receive/CC2420ReceiveP.nc:


      /*
       * The destination address check here is not completely optimized. If you
       * are seeing issues with dropped acknowledgements, try removing
       * the address check and decreasing SACK_HEADER_LENGTH to 2.
       * The length byte and the FCF byte are the only two bytes required
       * to know that the packet is valid and requested an ack.  The destination
       * address is useful when we want to sniff packets from other transmitters
       * while acknowledging packets that were destined for our local address.
       */
     //--if(call CC2420Config.isAutoAckEnabled() && !call CC2420Config.isHwAutoAckDefault()) {
      if( !call CC2420Config.isHwAutoAckDefault()) {
      //--if (1) {
        //--if (((( header->fcf >> IEEE154_FCF_ACK_REQ ) & 0x01) == 1)
        if ( 1
            && ((header->dest == call CC2420Config.getShortAddr())
                || (header->dest == AM_BROADCAST_ADDR))
            && ((( header->fcf >> IEEE154_FCF_FRAME_TYPE ) & 7) == IEEE154_TYPE_DATA)) {
          // CSn flippage cuts off our FIFO; SACK and begin reading again







      // We may have received an ack that should be processed by Transmit
      // buf[rxFrameLength] >> 7 checks the CRC
      //--if ( ( buf[ rxFrameLength ] >> 7 ) && rx_buf ) {
      if ( rx_buf ) {



cc2420/transmit/CC2420TransmitP.nc:


      case S_EFD:
        sfdHigh = FALSE;
        call CaptureSFD.captureRisingEdge();
       
        //--if ( (call CC2420PacketBody.getHeader( m_msg ))->fcf & ( 1 << IEEE154_FCF_ACK_REQ ) ) {
        if ( 1 ) {


Friday, February 22, 2013

CC2420 CRC verification

This online calculator could do the same CRC calculation as in tinyos:

http://depa.usst.edu.cn/chenjq/www2/SDesign/JavaScript/CRCcalculation.htm


The improved CRC function can be found in tinyos:


/**
 * The following implementation computes the same polynomial.  It should be
 * (much) faster on any processor architecture, as it does not involve
 * loops. Unfortunately, I can not yet give a reference to a derivation.
 *
 * @author Andreas Koepke (porting to tinyos)
 * @author Paul Curtis (pointed out this implementation on the MSP430 yahoo mailing list)
 */



  uint16_t crc_Byte(uint16_t crc, uint8_t b) {
    crc = (uint8_t)(crc >> 8) | (crc << 8);
    crc ^= b;
    crc ^= (uint8_t)(crc & 0xff) >> 4;
    crc ^= crc << 12;
    crc ^= (crc & 0xff) << 5;
  return crc;
}


  uint16_t crc_packet(uint8_t *data, int len) {
    uint16_t crc = 0;

    while (len-- > 0)
      crc = crcByte(crc, *data++);

    return crc;
  }

Wednesday, January 9, 2013

How to clear IEEE154_FCF_ACK_REQ to remove the ACK requirement

../cc2420/csma/CC2420CsmaP.nc :

Change line143:     header->fcf &= ( (1 << IEEE154_FCF_ACK_REQ) |

to     header->fcf &= ( (0 << IEEE154_FCF_ACK_REQ) |

Change line 151:    metadata->ack = FALSE;
to      metadata->ack = TRUE;

Sunday, January 6, 2013

CC2420 Layer Diagram


[plain] view plaincopy
  1. +--------------------------------------------------+  
  2. |               Application Layer                  |  
  3. |                                                  |  
  4. +-----------------------+--------------------------+  
  5.    
  6.  +----------------------+-------------------------+  
  7.  |             Active Message Layer               |  
  8.  +----------------------+-------------------------+  
  9.    
  10.  +----------------------+-------------------------+  
  11.  |              Unique Send Layer                 |  
  12.  +----------------------+-------------------------+  
  13.                     
  14.  +----------------------+-------------------------+  
  15.  |         Optional Packet Link Layer             |  
  16.  +----------------------+-------------------------+  
  17.                           
  18.  +----------------------+-------------------------+  
  19.  |  Optional Low Power Listening Implementations  |  
  20.  +----------------------+-------------------------+  
  21.                           
  22.  +----------------------+-------------------------+  
  23.  |        Unique Receive Filtering Layer          |  
  24.  +----------------------+-------------------------+  
  25.                           
  26.  +----------------------+-------------------------+  
  27.  |      Optional 6LowPAN TinyOS Network Layer     |  
  28.  +----------------------+-------------------------+  
  29.                           
  30.  +----------------------+-------------------------+  
  31.  |     Carrier Sense Multiple Access (CSMA)       |  
  32.  +----------------------+-------------------------+  
  33.                           
  34.                                      
  35. +----------+----------+   +----------+----------+  
  36. |      ReceiveP       |   |      TransmitP      |  
  37. +----------+----------+   +----------+----------+  
  38.                                       
  39.                           
  40. +-----------------------+-------------------------+  
  41. |    SPI bus, GPIO, Interrupts, Timer Capture     |  
  42. +-------------------------------------------------+