Unable to validate cryptogram via BP-Tools - emv

I have VISA test card, also I can see cryptogram data and all EMV-data in log-file. But if I calculate cryptogram via BP-Tools-Cryptographic Calculator (EMV->Application Cryptograms->VSDC) I does not see the same result - cryptogram from card not the same as cryptogram calculated in BP-Tools.
Incoming data from logs :
82 : 3C00
9F36 : 02CF
9F10 : 06010A03A02000
9F26 : 9DAE464A3FD4B929
Based on 9F10 - Cryptogram Version Number is 10. According this I use VSDC->CVN10 and fill correctly all tags values.
QUESTION : what value I need to put on "session key" field ?
I have KMC (printed on top of card), also I have IMKAC from HSM side.
I tried to use this keys from UDK-tab, also tried put keys into "session key" field - but without success - cryptogram from card not equal that cryptogram from BP-Tools.

Below is a part from EMV Book 2. The one inside the block is what you need to implement to key in the unique key for Visa CVN 10.

Related

Looking for an example of a OBD-II complete data frame

I'm developing an OBD-II reader where I want to query requests to read PID parameters with a stm32 processor. I already understand what should go on the data field, but the ID is giving me a headache. As I have read, one must send 0x7DF to broadcast a request, and each ECU will respond with his own ID. However, I have been asked to do this within the SAE J1939 protocol, which uses the 29 bit extended identifier, and I don't know what I need to add to this ID.
As I stated in the title, could someone show me some actual data from a bus using this method? I've been searching on the internet for real frames but did not have any luck so far.
I woud also appreciate if someone could shred some light to if the OBD-II communication needs some acknowledgment to work properly.
Thanks
I would suggest you to take a look on the SAE J1939 documentation, in the more specifically on the J1939/21,J1939-71 and J1939/73.
Generally, a J1939 transport protocol response sequence can be processed as follows:
Identify the BAM frame, indicating a new sequence being initiated
(via the PGN 60416 - 0xEC00 can be reach by 0x1CECFF00 )
Extract the J1939 PGN from bytes 6-8 of the BAM payload to use as the
identifier of the new frame
Construct the new data payload by concatenating bytes 2-8 of the data
transfer frames (i.e. excl. the 1st byte)
A J1939 data transfer messages with ID 1CEBFF00 (PGN 60160 or EB00).
Above, the last 3 bytes of the BAM equal E3FE00. When reordered, these equal the PGN FEE3 aka Engine Configuration 1 (EC1). Further, the payload is found by combining the the first 39 bytes across the 6 data transfer packets/fram
The administrative control device or any device issuing the vehicle use status PID should be sensitive to the run switch status (SPN 3046 - 0xFDC0 which probably can be reach by 0xCFDC000) and any other locally defined criteria for authorized use (i.e., driver log-ons) before the vehicle use status PID is used to generate an unauthorized use alarm.
Also, you can't forget to uses a read/send to extend ID message, since that is a 24-bit.
In fact, i will suggest you to use can-utils to make your a analyses even easier. A simple can-dump or can-sniffer you can see what is coming on your broadcast.
Some car's dbc https://github.com/commaai/opendbc

What does {+} mean in api variable types?

[![enter image description here][1]][1][![enter image description here][2]][2]This variable type was specified in an API. What does it mean? An object with properties?
webinar_id* {+}
It says string but when I input a string for webinar_id I get a 400 missing required parameter.
The linked document shows you that webinar_id is a string that is obtained by the call from section 1. Section 1 also specifies an array called schedules, and since the API call in question asks for an integer called schedule it is logical to assume this is the array of the index previously returned in the section 1 JSON response.
EDIT: webinar_id is also a string and schedule is also an int in the response from the call of section 2. I assume those will be identical to those from section 1.
The fact that {+} indicates re-using values from other requests is outlined in the subscript in section 3.
{+} webinar_id and schedule must be obtained from a previous API call to retrieve the details from whatever specific webinar you want to register the person to.
Hope that helps. It mostly just comes down to careful reading of the documentation document (which you should be glad you have, things aren't always this explicit!)

EMV Question : What kind of data do Issuer need to verify my card beside AC information?

May I know that after the generate a AC , what kind of information i need to pass to issue for verification ? Do i need to send my AC with PAN , PAN SN , CID and ATC to issuer for card identification ?
Thank you
David
Simple rule - data used during creation should be available during verification. The data elements used for creating GEN AC1 you can find from CDOL1. (another is to get it from Cryptogram version number, check based on context) These data you should make sure is passed to issuer. Card sequence number is not a part of CDOL1, but this has to be made available to the issuer( a common mistake).

How to determine if a memory address references a valid file offset

I am trying figure out a way to calculate if a given address or list of addresses correspond to a valid file offset. I know to calculate an offset for a valid address uses the formula:
ByteVirutalAddress - (ImageBase + SectionRelativeVirtualAddress) + PointerToRawdata = ByteOffset
I use this formula when patching instructions using a manual hex editor method as opposed to a nice easy to use GUI like Immunity.
What I am trying to do is find out weather an address or list of addresses correspond to a file offset. For example:
Section name - Address - Size
Image base: 00400000 - 00001000
.text: 00401000 - 00003000
.rdata: 00404000 - 00001000
.data: 00405000 - 0002B000
How do I calculate if addresses 00404185 or 0042F300 relate to a valid file offset or not?
My logic for this is:
you would need to do PointerToRawData + SizeOfRawdata + IMagebase, 400000 in this case. And do this for each section.
OR
Would it be correct to add Virtual Address of the section to the SizeOfRawdata of the section. From the result you should be able to see if either of these 2 addresses correspond to a valid file offset.
From the results, see which of the 2 above addresses are referenced in the result, i.e. result = 42D100. this references 0042300 however does not reference or correspond to 00403185.
Please let me know if my logic is flawed.
I have looked around a lot and have not found an information for this kind of calculation specifically. It is only useful if checking for correct alignment or possible corruption. I know that there are tools out there to do it for you but I like to know how to do things manually rather than rely on a script or tool. It helps when things go wrong with tools and scripts.
just so this can be answered. I have figured out the correct logic for figuring this one out.
It would be correct to use the second option, + < Section SizeOfRawdata> = Maximum possible RVA range for that section. This should give you the maximum possible relative virtual address of that section and then from this, you can see if the address either falls within this value or not.

Geocortex "Required parameter is null or empty"

I am currently creating a workflow in which the user captures a point geometry by clicking on the map (this works), then the map zooms to the point's extent (this also works), and then buffers the point (this does not work).
My BufferTask activity gives me this: "Unhandled exception: 'Required parameter is null or empty. Parameter name: Geometry.SpatialReference in activity '1.3: BufferTask'"
This doesn't make sense to me since I have indeed entered a value for this parameter.
sidenote: Geocortex's documentation is virtually non-existent. My inner-cynic is telling me that this is on purpose so that you keep paying them to do things for you.
My 2 best guesses would be either that the buffer spatial reference is null (the spatial reference used to actually create the buffer itself), or that the selectedLocation spatial reference is null for some reason.
For the first, see if there's a value entered for "Buffer Spatial Reference" which you'll see in the properties panel on the right side of the designer when you've got the Buffer Task selected. Note that using Web Mercator as the Buffer Spatial Reference will likely give you an inaccurate buffer due to distance distortion in that projection.
For the second, you could explicitly assign a SpatialReference to selectedLocation.SpatialReference using an assign activity (making sure that the assigned SpatialReference matches the actual spatial reference of your location).
Check to make sure you specified a correct spatialReference, so the workflow module can assess the "length" of buffer.
In addition isolate the problem.
Create a clean variable of type spatialReference and assign a NEW SpatialRef(wkid). Then use that variable.